home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / vil310 / src / vil_vwm.src < prev   
Text File  |  1995-02-20  |  87KB  |  1,579 lines

  1. 15000 '<<<<<<<<<<<<<<<<<<<<  Visual Interface Library  >>>>>>>>>>>>>>>>>>>>
  2. 15002 '<<<<<<<<<<<<<<<<<<<<        V I L        >>>>>>>>>>>>>>>>>>>>
  3. 15004 '<<<<<<<<<<<< ウィンドウマネージャ・パッケージ・ファイル >>>>>>>>>>>>
  4. 15006 '
  5. 15008 '--------------------  バージョンチェック --------------------
  6. 15010 '
  7. 15012 *VIL_VWM_VER
  8. 15014 VIL_VER%=310                                  'VIL VER3.10
  9. 15016 RETURN
  10. 15018 '
  11. 15020 '--------------------  ウィンドウマネージャ・パッケージ -----------
  12. 15022 '必要パッケージ : ウィンドウ、メニュー選択、スクロールバー
  13. 15024 '・ウィンドウ・オープン / クローズ処理代替
  14. 15026 '・外枠付属のスクロールバー管理
  15. 15028 '・ウィンドウ外枠・スイッチ等の描画
  16. 15030 '・ウィンドウ移動・サイズ変更・スタック順序変更(現在未サポート)
  17. 15032 '・マウスカーソル資源の定義
  18. 15034 '
  19. 15036 *VIL_VWM_INITM
  20. 15038 ' ウィンドウマネージャ・パッケージ初期化
  21. 15040 '
  22. 15042 '入力変数         : W0%           : 最大ウィンドウ通し番号
  23. 15044 '                   W1%           : ウィンドウ背景色用パレット番号
  24. 15046 '                   W2%           : ウィンドウ枠幅パターン数
  25. 15048 '                                   (0でシステム予約分だけ確保)
  26. 15050 '破壊変数         : I%            : ループ用
  27. 15052 '出力変数         : なし
  28. 15054 '呼出しモジュール : VWM_MCR
  29. 15056 '使用環境 :・ページ0が16色グラフィック画面
  30. 15058 '     ・マウス表示ページ0
  31. 15060 '     ・マウス移動範囲 (0,0)-(639,479)
  32. 15062 '          ・ウィンドウ・サイズ : 最小60x8 / 最大624x456
  33. 15064 IF VIL_E%=0 THEN
  34. 15066 'パッケージ変数
  35. 15068 '   アクティブウィンドウ属性
  36. 15070 '                                (有効な属性の和を指定)
  37. 15072 '             1 : MENU        メニュースイッチ表示
  38. 15074 '             2 : CLOSE       クローズ可能(スイッチ表示)
  39. 15076 '             4 : HIDE        一時消去可能(スイッチ表示)
  40. 15078 '             8 : MOVE        移動可能
  41. 15080 '            16 : RESIZE      サイズ変更可能(スイッチ表示)
  42. 15082 '            32 : LOWER       そのウィンドウを他のウィンドウの下に
  43. 15084 '                             することを許す?
  44. 15086 '                             (現バージョンでは未サポート)
  45. 15088 '       64-2048 : RESERVE     現バージョンでは未使用
  46. 15090 '          4096 : XSCRLBAR    横方向スクロールバー
  47. 15092 '          8192 : YSCRLBAR    縦方向スクロールバー
  48. 15094 '         16384 : NOFRAME     ウィンドウ枠無
  49. 15096 '   アクティブウィンドウ・タイトル
  50. 15098   VIL_VWM_AT%=  0:VIL_VWM_T$=""
  51. 15100 '   VWM_AT%,WIN_PM% 保存
  52. 15102   VIL_VWM_ATB%= 0:VIL_VWM_PMB%= 0
  53. 15104 '   座標ワーク
  54. 15106 '   移動/リサイズ時左上隅座標最小値・右下隅座標最大値
  55. 15108 '   (枠の端が到達しうる座標))
  56. 15110   VIL_VWM_WX%=  0:VIL_VWM_WY% = 0
  57. 15112   VIL_VWM_XM%=  0:VIL_VWM_YM%=  0:VIL_VWM_WM%=639:VIL_VWM_ZM%=479
  58. 15114 '   リサイズ時のX・Y方向長さ最小値・最大値
  59. 15116 '   (枠幅は長さに含まない)
  60. 15118 '  VIL_VWM_XL%= 32:VIL_VWM_YL%=  8:VIL_VWM_WL%=624:VIL_VWM_ZL%=458
  61. 15120   VIL_VWM_XL%= 60:VIL_VWM_YL%=  8:VIL_VWM_WL%=624:VIL_VWM_ZL%=456
  62. 15122 '   移動時の単位ドット数,リサイズ時の単位ドット数
  63. 15124   VIL_VWM_XD%=  1:VIL_VWM_YD%=  1:VIL_VWM_WD%=  1:VIL_VWM_ZD%=  1
  64. 15126 '   スクロールバー論理長,インジケータ論理長,インジケータ論理位置
  65. 15128   VIL_VWM_XLBL%=0:VIL_VWM_XLIL%=0:VIL_VWM_XLIP%=0
  66. 15130   VIL_VWM_YLBL%=0:VIL_VWM_YLIL%=0:VIL_VWM_YLIP%=0
  67. 15132 '   ウィンドウ通し番号 (0のとき無効),ウィンドウマネージャ処理結果
  68. 15134   VIL_VWM_N%=0:VIL_VWM_R%=0
  69. 15136 '   最大ウィンドウ通し番号,ウィンドウ背景色用パレット番号
  70. 15138   VIL_VWM_NMAX%=VIL_W0%:VIL_VWM_CB%=VIL_W1%
  71. 15140 '   通し番号でのウィンドウ位置保存
  72. 15142   DIM VIL_VWM_X%(VIL_W0%),VIL_VWM_Y%(VIL_W0%),                                     VIL_VWM_W%(VIL_W0%),VIL_VWM_Z%(VIL_W0%)
  73. 15144 '   ウィンドウ属性,ウィンドウタイトル
  74. 15146 '   ウィンドウ通し番号保存,ウィンドウ枠幅パターン番号
  75. 15148   DIM VIL_VWM_AT%(VIL_WIN_ANMAX%),VIL_VWM_T$(VIL_WIN_ANMAX%),                      VIL_VWM_N%(VIL_WIN_ANMAX%) ,VIL_VWM_FW%(VIL_WIN_ANMAX%)
  76. 15150 '     枠・背景色の(G,R,B)輝度
  77. 15152   DIM VIL_VWM_CF%(2),VIL_VWM_CB%(2)
  78. 15154   IF VIL_W2%=0 THEN VIL_W2%=5
  79. 15156   DIM VIL_VWM_UB%(VIL_W2%),VIL_VWM_DB%(VIL_W2%),                                   VIL_VWM_RB%(VIL_W2%),VIL_VWM_LB%(VIL_W2%)
  80. 15158   RESTORE *VIL_VWM_INITM_D0
  81. 15160   FOR VIL_I%=1 TO 5:READ VIL_VWM_UB%(VIL_I%),VIL_VWM_DB%(VIL_I%),                                     VIL_VWM_RB%(VIL_I%),VIL_VWM_LB%(VIL_I%):            NEXT
  82. 15162 *VIL_VWM_INITM_D0
  83. 15164   DATA  0, 0, 0, 0  ' 1 枠無
  84. 15166   DATA 16, 8, 8, 8  ' 2 通常枠
  85. 15168   DATA 16,16, 8, 8  ' 3 Xスクロールバー
  86. 15170   DATA 16, 8,16, 8  ' 4 Yスクロールバー
  87. 15172   DATA 16,16,16, 8  ' 5 XYスクロールバー
  88. 15174 '
  89. 15176 '   CNF読み込み
  90. 15178   VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB *VIL_LNR:WEND
  91. 15180 '       標準マウスカーソル
  92. 15182   GOSUB *VIL_VWM_MCR:                                                          VIL_VWM_MCX0%=VIL_VWM_MCX%:VIL_VWM_MCY0%=VIL_VWM_MCY%:                       VIL_VWM_MCA0$=VIL_VWM_MCA$:VIL_VWM_MCD0$=VIL_VWM_MCD$
  93. 15184 '       ウィンドウ移動用マウスカーソル
  94. 15186   GOSUB *VIL_VWM_MCR:                                                          VIL_VWM_MCX1%=VIL_VWM_MCX%:VIL_VWM_MCY1%=VIL_VWM_MCY%:                       VIL_VWM_MCA1$=VIL_VWM_MCA$:VIL_VWM_MCD1$=VIL_VWM_MCD$
  95. 15188 '       ウィンドウサイズ変更用マウスカーソル
  96. 15190   GOSUB *VIL_VWM_MCR:                                                          VIL_VWM_MCX2%=VIL_VWM_MCX%:VIL_VWM_MCY2%=VIL_VWM_MCY%:                       VIL_VWM_MCA2$=VIL_VWM_MCA$:VIL_VWM_MCD2$=VIL_VWM_MCD$
  97. 15192 '
  98. 15194   MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  99. 15196 ENDIF
  100. 15198 RETURN
  101. 15200 '
  102. 15202 *VIL_VWM_ENVR
  103. 15204 ' アプリ環境ファイル読み込み
  104. 15206 '
  105. 15208 '入力変数         : なし
  106. 15210 '破壊変数         : I%            : ループ用
  107. 15212 '出力変数         : VWM_CF%()     : 枠の(G,R,B)輝度
  108. 15214 '                   VWM_CB%()     : 背景色の(G,R,B)輝度
  109. 15216 '                   VWM_X%(),     : ウィンドウ位置保存
  110. 15218 '                   VWM_Y%(),
  111. 15220 '                   VWM_W%(),
  112. 15222 '                   VWM_Z%()
  113. 15224 '呼出しモジュール : LNR
  114. 15226 '
  115. 15228 VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB *VIL_LNR:WEND
  116. 15230 '     枠の(G,R,B)輝度読み込み
  117. 15232 GOSUB *VIL_LNR
  118. 15234 FOR VIL_I%=0 TO 2
  119. 15236   VIL_VWM_CF%(VIL_I%)=VAL(VIL_W0$):                                            VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  120. 15238 NEXT
  121. 15240 '     背景色の(G,R,B)輝度読み込み
  122. 15242 GOSUB *VIL_LNR
  123. 15244 FOR VIL_I%=0 TO 2
  124. 15246   VIL_VWM_CB%(VIL_I%)=VAL(VIL_W0$):                                            VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  125. 15248 NEXT
  126. 15250 '     ウィンドウ位置読み込み
  127. 15252 FOR VIL_I%=1 TO VIL_VWM_NMAX%
  128. 15254   GOSUB *VIL_LNR
  129. 15256   VIL_VWM_X%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  130. 15258   VIL_VWM_Y%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  131. 15260   VIL_VWM_W%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
  132. 15262   VIL_VWM_Z%(VIL_I%)=VAL(VIL_W0$)
  133. 15264 NEXT
  134. 15266 GOSUB *VIL_VWM_PALSET
  135. 15268 RETURN
  136. 15270 '
  137. 15272 *VIL_VWM_ENVW
  138. 15274 ' アプリ環境ファイル書き込み
  139. 15276 '
  140. 15278 '入力変数         : なし
  141. 15280 '破壊変数         : なし
  142. 15282 '出力変数         : なし
  143. 15284 '呼出しモジュール : なし
  144. 15286 '
  145. 15288 PRINT #1,"#VWM"
  146. 15290 '     枠の(G,R,B)輝度書き込み
  147. 15292 PRINT #1,USING "###,###,###";                                                VIL_VWM_CF%(0),VIL_VWM_CF%(1),VIL_VWM_CF%(2)
  148. 15294 '     背景色の(G,R,B)輝度書き込み
  149. 15296 PRINT #1,USING "###,###,###";                                                VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)
  150. 15298 '     ウィンドウ位置書き込み
  151. 15300 FOR VIL_I%=1 TO VIL_VWM_NMAX%
  152. 15302 PRINT #1,USING "###,###,###,###";                                            VIL_VWM_X%(0),VIL_VWM_Y%(0),VIL_VWM_W%(0),VIL_VWM_Z%(0)
  153. 15304 NEXT
  154. 15306 RETURN
  155. 15308 '
  156. 15310 *VIL_VWM_MCR
  157. 15312 ' マウスカーソル資源読み込み
  158. 15314 '
  159. 15316 '入力変数         : なし
  160. 15318 '破壊変数         : I%            : ループ用
  161. 15320 '                   W0$           : ファイル読込用
  162. 15322 '出力変数         : VWM_MCX%,     : 水平読み取り位置
  163. 15324 '                   VWM_MCY%      : 垂直読み取り位置
  164. 15326 '                   VWM_MCA$      : andパターン
  165. 15328 '                   VWM_MCD$      : ドットパターン
  166. 15330 '呼出しモジュール : LNR
  167. 15332 '
  168. 15334 GOSUB *VIL_LNR:VIL_VWM_MCX%=VAL(VIL_W0$):                                                   VIL_VWM_MCY%=VAL(MID$(VIL_W0$,INSTR(VIL_W0$,",")+1))
  169. 15336 GOSUB *VIL_LNR
  170. 15338 VIL_VWM_MCA$="":VIL_VWM_MCD$=""
  171. 15340 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCA$=VIL_VWM_MCA$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):          NEXT
  172. 15342 GOSUB *VIL_LNR
  173. 15344 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCD$=VIL_VWM_MCD$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):          NEXT
  174. 15346 RETURN
  175. 15348 '
  176. 15350 *VIL_VWM_PALSET
  177. 15352 ' ウィンドウ枠・背景色パレット設定
  178. 15354 '
  179. 15356 '入力変数         : VWM_CF%()     : 枠の(G,R,B)輝度
  180. 15358 '                   VWM_CB%()     : 背景色の(G,R,B)輝度
  181. 15360 '                   VWM_CB%       : ウィンドウ背景色用パレット番号
  182. 15362 '破壊変数         : W0%,W1%,W2%   : 輝度ワーク
  183. 15364 '出力変数         : なし
  184. 15366 '呼出しモジュール : なし
  185. 15368 '
  186. 15370 VIL_W0%=VIL_VWM_CF%(0):VIL_W1%=VIL_VWM_CF%(1):VIL_W2%=VIL_VWM_CF%(2)
  187. 15372 PALETTE 1,[VIL_W0%-80+(VIL_W0%<80)*(VIL_W0%-80)                                        ,VIL_W1%-80+(VIL_W1%<80)*(VIL_W1%-80)                                        ,VIL_W2%-80+(VIL_W2%<80)*(VIL_W2%-80)],1
  188. 15374 PALETTE 2,[VIL_W0%,VIL_W1%,VIL_W2%],1
  189. 15376 PALETTE 3,[VIL_W0%+80+(255<VIL_W0%)*(VIL_W0%-255)                                      ,VIL_W1%+80+(255<VIL_W1%)*(VIL_W1%-255)                                      ,VIL_W2%+80+(255<VIL_W2%)*(VIL_W2%-255)],1
  190. 15378 PALETTE VIL_VWM_CB%,[VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)],1
  191. 15380 RETURN
  192. 15382 '
  193. 15384 *VIL_VWM_OP
  194. 15386 ' ウィンドウ・オープン
  195. 15388 '
  196. 15390 '入力変数         : VWM_N%        : ウィンドウ通し番号
  197. 15392 '                     VWM_N%=0のとき
  198. 15394 '                       WIN_X%,WIN_Y%         : ウィンドウ左上隅座標
  199. 15396 '                       WIN_W%,WIN_Z%         : ウィンドウ右下隅座標
  200. 15398 '                     VWM_N%<>0のとき
  201. 15400 '                       VWM_X%(VWM_N%),       : ウィンドウ左上隅座標
  202. 15402 '                       VWM_Y%(VWM_N%)
  203. 15404 '                       VWM_W%(VWM_N%),       : ウィンドウ右下隅座標
  204. 15406 '                       VWM_Z%(VWM_N%)
  205. 15408 '                   VWM_AT%       : アクティブウィンドウ属性
  206. 15410 '                   VWM_T$        : アクティブウィンドウ・タイトル
  207. 15412 '                   VWM_AT%のXSCRLBAR属性ONのとき
  208. 15414 '                       VWM_XLBL%     : スクロールバー論理長
  209. 15416 '                       VWM_XLIL%     : インジケータ論理長
  210. 15418 '                       VWM_XLIP%     : インジケータ論理位置
  211. 15420 '                   VWM_AT%のYSCRLBAR属性ONのとき
  212. 15422 '                       VWM_YLBL%     : スクロールバー論理長
  213. 15424 '                       VWM_YLIL%     : インジケータ論理長
  214. 15426 '                       VWM_YLIP%     : インジケータ論理位置
  215. 15428 '破壊変数         : W0%           : ウィンドウ・タイトル表示処理
  216. 15430 '出力変数         : E%            : 0 : 正常終了
  217. 15432 '                                   5 : オープン失敗(退避領域不足)
  218. 15434 '                   WIN_X%,WIN_Y%,
  219. 15436 '                   WIN_W%,WIN_Z% : オープン失敗時のみ、
  220. 15438 '                             現在のアクティブ・ウィンドウの
  221. 15440 '                                   値を設定
  222. 15442 '                   WIN_UB%,      : アクティブウィンドウの
  223. 15444 '                   WIN_DB%,        枠幅パターンに応じた値をセット
  224. 15446 '                   WIN_LB%,
  225. 15448 '                   WIN_RB%
  226. 15450 '                   WIN_PM%       : -1 (相対座標モード)
  227. 15452 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_OP
  228. 15454 '
  229. 15456 GOSUB *VIL_WIN_PMA
  230. 15458 IF VIL_WIN_AN% THEN
  231. 15460   LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF                   '旧AWのハイライトバー消去
  232. 15462 ENDIF
  233. 15464 IF VIL_VWM_N% THEN                '通しウィンドウ番号での座標復元
  234. 15466   VIL_WIN_X%=VIL_VWM_X%(VIL_VWM_N%):VIL_WIN_Y%=VIL_VWM_Y%(VIL_VWM_N%)
  235. 15468   VIL_WIN_W%=VIL_VWM_W%(VIL_VWM_N%):VIL_WIN_Z%=VIL_VWM_Z%(VIL_VWM_N%)
  236. 15470 ENDIF
  237. 15472 '                                  ウィンドウ枠幅作成
  238. 15474 IF VIL_VWM_AT% AND 16384 THEN VIL_VWM_FW%(VIL_WIN_AN%+1)=1                     ELSE VIL_VWM_FW%(VIL_WIN_AN%+1)=2-((VIL_VWM_AT% AND 4096)=4096)                                               -((VIL_VWM_AT% AND 8192)=8192)*2
  239. 15476 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%+1)):                         VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%+1))
  240. 15478 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%+1)):                         VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%+1))
  241. 15480 '
  242. 15482 GOSUB *VIL_WIN_OP
  243. 15484 IF VIL_E% THEN            '退避領域不足なら旧AWのハイライトバー復元
  244. 15486   LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF
  245. 15488 ELSE
  246. 15490   VIL_VWM_AT%(VIL_WIN_AN%)=VIL_VWM_AT%
  247. 15492   VIL_VWM_T$(VIL_WIN_AN%) =VIL_VWM_T$
  248. 15494   VIL_VWM_N%(VIL_WIN_AN%) =VIL_VWM_N%
  249. 15496 '----- 外枠描画 -----
  250. 15498   IF VIL_VWM_FW%(VIL_WIN_AN%)=1 THEN
  251. 15500     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),                              PSET,%VIL_VWM_CB%,BF
  252. 15502   ELSE
  253. 15504     LINE(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)                             -(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),                              PSET,%VIL_VWM_CB%,BF
  254. 15506 '
  255. 15508     LINE(VIL_WIN_X%            - 2,VIL_WIN_Y%            -13)                       -(VIL_WIN_W%            + 2,VIL_WIN_Y%            - 3),                        PSET,%2,BF                                            '上部枠
  256. 15510 '
  257. 15512     LINE(VIL_WIN_X%            - 5,VIL_WIN_Y%            -13)                       -(VIL_WIN_X%            - 3,VIL_WIN_Z%            + 2),                        PSET,%2,BF                                            '左部枠
  258. 15514     LINE(VIL_WIN_W%            + 3,VIL_WIN_Y%            -13)                       -(VIL_WIN_W%+VIL_WIN_RB%- 3,VIL_WIN_Z%            + 2),                        PSET,%2,BF                                            '右部枠
  259. 15516     LINE(VIL_WIN_X%            - 5,VIL_WIN_Z%            + 3)                       -(VIL_WIN_W%+VIL_WIN_RB%- 3,VIL_WIN_Z%+VIL_WIN_DB%- 3),                        PSET,%2,BF                                            '下部枠
  260. 15518 '
  261. 15520     CONNECT(VIL_WIN_W%+VIL_WIN_RB%- 1,VIL_WIN_Y%            -15)                       -(VIL_WIN_X%            - 7,VIL_WIN_Y%            -15)                       -(VIL_WIN_X%            - 7,VIL_WIN_Z%+VIL_WIN_DB%- 1),%3
  262. 15522     CONNECT(VIL_WIN_W%+VIL_WIN_RB%- 2,VIL_WIN_Y%            -14)                       -(VIL_WIN_X%            - 6,VIL_WIN_Y%            -14)                       -(VIL_WIN_X%            - 6,VIL_WIN_Z%+VIL_WIN_DB%- 2),%3
  263. 15524     CONNECT(VIL_WIN_X%            - 6,VIL_WIN_Z%+VIL_WIN_DB%- 1)                       -(VIL_WIN_W%+VIL_WIN_RB%- 1,VIL_WIN_Z%+VIL_WIN_DB%- 1)                       -(VIL_WIN_W%+VIL_WIN_RB%- 1,VIL_WIN_Y%            -14),%1
  264. 15526     CONNECT(VIL_WIN_X%            - 5,VIL_WIN_Z%+VIL_WIN_DB%- 2)                       -(VIL_WIN_W%+VIL_WIN_RB%- 2,VIL_WIN_Z%+VIL_WIN_DB%- 2)                       -(VIL_WIN_W%+VIL_WIN_RB%- 2,VIL_WIN_Y%            -14),%1
  265. 15528 '
  266. 15530     CONNECT(VIL_WIN_W%            + 1,VIL_WIN_Y%            - 2)                       -(VIL_WIN_X%            - 2,VIL_WIN_Y%            - 2)                       -(VIL_WIN_X%            - 2,VIL_WIN_Z%            + 1),%1
  267. 15532     CONNECT(VIL_WIN_W%               ,VIL_WIN_Y%            - 1)                       -(VIL_WIN_X%            - 1,VIL_WIN_Y%            - 1)                       -(VIL_WIN_X%            - 1,VIL_WIN_Z%               ),%1
  268. 15534     CONNECT(VIL_WIN_X%            - 2,VIL_WIN_Z%            + 2)                       -(VIL_WIN_W%            + 2,VIL_WIN_Z%            + 2)                       -(VIL_WIN_W%            + 2,VIL_WIN_Y%            - 2),%3
  269. 15536     CONNECT(VIL_WIN_X%            - 1,VIL_WIN_Z%            + 1)                       -(VIL_WIN_W%            + 1,VIL_WIN_Z%            + 1)                       -(VIL_WIN_W%            + 1,VIL_WIN_Y%            - 1),%3
  270. 15538 '
  271. 15540     IF VIL_VWM_AT% AND 6 THEN
  272. 15542       LINE(VIL_WIN_X%+11,VIL_WIN_Y%-13)-(VIL_WIN_X%+11,VIL_WIN_Y%- 3),                  PSET,%1
  273. 15544       LINE(VIL_WIN_X%+12,VIL_WIN_Y%-13)-(VIL_WIN_X%+12,VIL_WIN_Y%- 3),                  PSET,%3
  274. 15546     ENDIF
  275. 15548     IF VIL_VWM_AT% AND 17 THEN
  276. 15550       LINE(VIL_WIN_W%-11,VIL_WIN_Y%-13)-(VIL_WIN_W%-11,VIL_WIN_Y%- 3),                  PSET,%3
  277. 15552       LINE(VIL_WIN_W%-12,VIL_WIN_Y%-13)-(VIL_WIN_W%-12,VIL_WIN_Y%- 3),                  PSET,%1
  278. 15554     ENDIF
  279. 15556 '----- CLOSE SWITCH -----
  280. 15558     IF VIL_VWM_AT% AND 2 THEN
  281. 15560       LINE(VIL_WIN_X%- 2,VIL_WIN_Y%-13)-(VIL_WIN_X%- 2,VIL_WIN_Y%- 3),                  PSET,%1
  282. 15562       LINE(VIL_WIN_X%- 1,VIL_WIN_Y%-13)-(VIL_WIN_X%- 1,VIL_WIN_Y%- 3),                  PSET,%3
  283. 15564       LINE(VIL_WIN_X%   ,VIL_WIN_Y%-13)-(VIL_WIN_X%+10,VIL_WIN_Y%- 3),                  PSET,%3
  284. 15566       LINE(VIL_WIN_X%   ,VIL_WIN_Y%-12)-(VIL_WIN_X%+ 9,VIL_WIN_Y%- 3),                  PSET,%1
  285. 15568       LINE(VIL_WIN_X%   ,VIL_WIN_Y%- 3)-(VIL_WIN_X%+10,VIL_WIN_Y%-13),                  PSET,%3
  286. 15570       LINE(VIL_WIN_X%   ,VIL_WIN_Y%- 4)-(VIL_WIN_X%+ 9,VIL_WIN_Y%-13),                  PSET,%1
  287. 15572     ENDIF
  288. 15574 '----- HIDE SWITCH -----
  289. 15576     IF VIL_VWM_AT% AND 4 THEN
  290. 15578       LINE(VIL_WIN_X%+24,VIL_WIN_Y%-13)-(VIL_WIN_X%+24,VIL_WIN_Y%-3 ),                  PSET,%1
  291. 15580       LINE(VIL_WIN_X%+25,VIL_WIN_Y%-13)-(VIL_WIN_X%+25,VIL_WIN_Y%-3 ),                  PSET,%3
  292. 15582       LINE(VIL_WIN_X%+13,VIL_WIN_Y%- 3)-(VIL_WIN_X%+23,VIL_WIN_Y%-13),                  PSET,%3
  293. 15584       LINE(VIL_WIN_X%+13,VIL_WIN_Y%- 4)-(VIL_WIN_X%+22,VIL_WIN_Y%-13),                  PSET,%1
  294. 15586     ENDIF
  295. 15588 '----- MENU SWITCH -----
  296. 15590     IF VIL_VWM_AT% AND 1 THEN
  297. 15592       LINE(VIL_WIN_W%-24,VIL_WIN_Y%-13)-(VIL_WIN_W%-24,VIL_WIN_Y%- 3),                   PSET,%3
  298. 15594       LINE(VIL_WIN_W%-25,VIL_WIN_Y%-13)-(VIL_WIN_W%-25,VIL_WIN_Y%- 3),                  PSET,%1
  299. 15596       LINE(VIL_WIN_W%-15,VIL_WIN_Y%- 9)-(VIL_WIN_W%-21,VIL_WIN_Y%- 9),                  PSET,%1
  300. 15598       LINE(VIL_WIN_W%-15,VIL_WIN_Y%- 8)-(VIL_WIN_W%-21,VIL_WIN_Y%- 8),                  PSET,%3
  301. 15600 '      LINE(VIL_WIN_W%-13,VIL_WIN_Y%-10)-(VIL_WIN_W%-23,VIL_WIN_Y%-10),                  PSET,%1
  302. 15602 '      LINE(VIL_WIN_W%-13,VIL_WIN_Y%- 9)-(VIL_WIN_W%-23,VIL_WIN_Y%- 9),                  PSET,%3
  303. 15604     ENDIF
  304. 15606 '----- RESIZE SWITCH -----
  305. 15608     IF VIL_VWM_AT% AND 16 THEN
  306. 15610       LINE(VIL_WIN_W%+ 2,VIL_WIN_Y%-13)-(VIL_WIN_W%+ 2,VIL_WIN_Y%-3),                     PSET,%3
  307. 15612       LINE(VIL_WIN_W%+ 1,VIL_WIN_Y%-13)-(VIL_WIN_W%+ 1,VIL_WIN_Y%-3),                     PSET,%1
  308. 15614       LINE(VIL_WIN_W%-10,VIL_WIN_Y%- 9)-(VIL_WIN_W%- 4,VIL_WIN_Y%- 9),                  PSET,%3
  309. 15616       LINE(VIL_WIN_W%-10,VIL_WIN_Y%-10)-(VIL_WIN_W%- 3,VIL_WIN_Y%-10),                  PSET,%1
  310. 15618       LINE(VIL_WIN_W%- 3,VIL_WIN_Y%-10)-(VIL_WIN_W%- 3,VIL_WIN_Y%- 3),                  PSET,%3
  311. 15620       LINE(VIL_WIN_W%- 4,VIL_WIN_Y%- 9)-(VIL_WIN_W%- 4,VIL_WIN_Y%- 3),                  PSET,%1
  312. 15622     ENDIF
  313. 15624 '----- X-SCROLL BAR -----
  314. 15626     IF VIL_VWM_AT% AND 4096 THEN
  315. 15628       LINE(VIL_WIN_X%- 2,VIL_WIN_Z%+ 2)-(VIL_WIN_X%- 2,VIL_WIN_Z%+13),                  PSET,%1
  316. 15630       LINE(VIL_WIN_X%- 1,VIL_WIN_Z%+ 3)-(VIL_WIN_X%- 1,VIL_WIN_Z%+13),                  PSET,%3
  317. 15632       LINE(VIL_WIN_W%+ 2,VIL_WIN_Z%+ 3)-(VIL_WIN_W%+ 2,VIL_WIN_Z%+13),                  PSET,%3
  318. 15634       LINE(VIL_WIN_W%+ 1,VIL_WIN_Z%+ 3)-(VIL_WIN_W%+ 1,VIL_WIN_Z%+13),                  PSET,%1
  319. 15636       VIL_SBAR_X%=VIL_WIN_X%:VIL_SBAR_W%=VIL_WIN_W%:                               VIL_SBAR_Y%=VIL_WIN_Z%+3
  320. 15638       VIL_SBAR_LBL%=VIL_VWM_XLBL%:VIL_SBAR_LIL%=VIL_VWM_XLIL%:                     VIL_SBAR_LIP%=VIL_VWM_XLIP%
  321. 15640       GOSUB *VIL_SBAR_XDRAW
  322. 15642     ENDIF
  323. 15644 '----- Y-SCROLL BAR -----
  324. 15646     IF VIL_VWM_AT% AND 8192 THEN
  325. 15648       LINE(VIL_WIN_W%+ 2,VIL_WIN_Y%- 2)-(VIL_WIN_W%+13,VIL_WIN_Y%- 2),                  PSET,%1
  326. 15650       LINE(VIL_WIN_W%+ 3,VIL_WIN_Y%- 1)-(VIL_WIN_W%+13,VIL_WIN_Y%- 1),                  PSET,%3
  327. 15652       LINE(VIL_WIN_W%+ 3,VIL_WIN_Z%+ 2)-(VIL_WIN_W%+13,VIL_WIN_Z%+ 2),                  PSET,%3
  328. 15654       LINE(VIL_WIN_W%+ 3,VIL_WIN_Z%+ 1)-(VIL_WIN_W%+13,VIL_WIN_Z%+ 1),                  PSET,%1
  329. 15656       VIL_SBAR_Y%=VIL_WIN_Y%:VIL_SBAR_Z%=VIL_WIN_Z%:                               VIL_SBAR_X%=VIL_WIN_W%+3
  330. 15658       VIL_SBAR_LBL%=VIL_VWM_YLBL%:VIL_SBAR_LIL%=VIL_VWM_YLIL%:                     VIL_SBAR_LIP%=VIL_VWM_YLIP%
  331. 15660       GOSUB *VIL_SBAR_YDRAW
  332. 15662     ENDIF
  333. 15664 '----- TITLE -----
  334. 15666     VIL_W0%=INT(VIL_WIN_W%-VIL_WIN_X%-60)/5
  335. 15668     IF VIL_W0%>0 THEN
  336. 15670       SYMBOL(VIL_WIN_X%+30,VIL_WIN_Y%-11),LEFT$(VIL_VWM_T$,VIL_W0%)                      ,.5!,.5!,%1,,,,1
  337. 15672     ENDIF
  338. 15674     LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF                   'ハイライトバー
  339. 15676 '
  340. 15678   ENDIF
  341. 15680 ENDIF
  342. 15682 '
  343. 15684 GOSUB *VIL_WIN_PMR
  344. 15686 RETURN
  345. 15688 '
  346. 15690 *VIL_VWM_CL
  347. 15692 ' ウィンドウ・クロ-ズ
  348. 15694 '
  349. 15696 '入力変数         : なし
  350. 15698 '破壊変数         : なし
  351. 15700 '出力変数         : WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
  352. 15702 '                   WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
  353. 15704 '                   VWM_AT%       : 新アクティブウィンドウ属性
  354. 15706 '                   VWM_T$        : 新アクティブウィンドウ・タイトル
  355. 15708 '                   VWM_N%        : 新アクティブウィンドウ通し番号
  356. 15710 '                     クローズ前のウィンドウのVWM_N%<>0のとき
  357. 15712 '                       VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
  358. 15714 '                       VWM_Y%(VWM_N%)
  359. 15716 '                       VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
  360. 15718 '                       VWM_Z%(VWM_N%)
  361. 15720 '                      (クローズ前に現在位置・サイズを保存)
  362. 15722 '                   WIN_UB%,      : アクティブウィンドウの
  363. 15724 '                   WIN_DB%,        枠幅パターンに応じた値をセット
  364. 15726 '                   WIN_LB%,
  365. 15728 '                   WIN_RB%
  366. 15730 '                   WIN_PM%       :  -1 (相対座標モード)
  367. 15732 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_CL
  368. 15734 '
  369. 15736 IF VIL_VWM_N% THEN                                                             VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:         VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
  370. 15738 GOSUB *VIL_WIN_PMA
  371. 15740 GOSUB *VIL_WIN_CL
  372. 15742 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
  373. 15744 VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%)
  374. 15746 VIL_VWM_N% =VIL_VWM_N%(VIL_WIN_AN%)
  375. 15748 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%))
  376. 15750 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%))
  377. 15752 IF VIL_WIN_AN% THEN                                                            LINE(VIL_WIN_X%+28,VIL_WIN_Y%-12)-(VIL_WIN_W%-28,VIL_WIN_Y%-4),                   XOR,%3,BF
  378. 15754 GOSUB *VIL_WIN_PMR
  379. 15756 RETURN
  380. 15758 '
  381. 15760 *VIL_VWM_CLDMY
  382. 15762 ' ウィンドウ・ダミークロ-ズ
  383. 15764 '
  384. 15766 '入力変数         : なし
  385. 15768 '破壊変数         : なし
  386. 15770 '出力変数         : WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
  387. 15772 '                   WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
  388. 15774 '                   VWM_AT%       : 新アクティブウィンドウ属性
  389. 15776 '                   VWM_T$        : 新アクティブウィンドウ・タイトル
  390. 15778 '                   VWM_N%        : 新アクティブウィンドウ通し番号
  391. 15780 '                     クローズ前のウィンドウのVWM_N%<>0のとき
  392. 15782 '                       VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
  393. 15784 '                       VWM_Y%(VWM_N%)
  394. 15786 '                       VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
  395. 15788 '                       VWM_Z%(VWM_N%)
  396. 15790 '                      (クローズ前に現在位置・サイズを保存)
  397. 15792 '                   WIN_UB%,      : アクティブウィンドウの
  398. 15794 '                   WIN_DB%,        枠幅パターンに応じた値をセット
  399. 15796 '                   WIN_LB%,
  400. 15798 '                   WIN_RB%
  401. 15800 '                   WIN_PM%       :  -1 (相対座標モード)
  402. 15802 '                   WIN_PM%       :  -1 (相対座標モード)
  403. 15804 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_CLDMY
  404. 15806 '
  405. 15808 IF VIL_VWM_N% THEN                                                             VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:         VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
  406. 15810 GOSUB *VIL_WIN_PMA
  407. 15812 GOSUB *VIL_WIN_CLDMY
  408. 15814 LINE(VIL_WIN_X%(VIL_WIN_AN%+1)+28,VIL_WIN_Y%(VIL_WIN_AN%+1)-12)                 -(VIL_WIN_W%(VIL_WIN_AN%+1)-28,VIL_WIN_Y%(VIL_WIN_AN%+1)- 4)                 ,XOR,%3,BF
  409. 15816 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
  410. 15818 VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%)
  411. 15820 VIL_VWM_N% =VIL_VWM_N%(VIL_WIN_AN%)
  412. 15822 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%))
  413. 15824 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%))
  414. 15826 IF VIL_WIN_AN% THEN                                                            LINE(VIL_WIN_X%+28,VIL_WIN_Y%-12)-(VIL_WIN_W%-28,VIL_WIN_Y%-4)                   ,XOR,%3,BF
  415. 15828 GOSUB *VIL_WIN_PMR
  416. 15830 RETURN
  417. 15832 '
  418. 15834 *VIL_VWM_CLALL
  419. 15836 ' ウィンドウ全クローズ
  420. 15838 '
  421. 15840 '入力変数         : なし
  422. 15842 '破壊変数         : なし
  423. 15844 '出力変数         : なし
  424. 15846 '呼出しモジュール : WIN_CL
  425. 15848 '
  426. 15850 WHILE VIL_WIN_AN%
  427. 15852   GOSUB *VIL_VWM_CL
  428. 15854 WEND
  429. 15856 RETURN
  430. 15858 '
  431. 15860 *VIL_VWM_CLS
  432. 15862 ' アクティブウィンドウ内クリア
  433. 15864 '入力変数         : なし
  434. 15866 '破壊変数         : なし
  435. 15868 '出力変数         : なし
  436. 15870 '呼出しモジュール : なし
  437. 15872 '
  438. 15874 LINE(0,0)-(VIL_WIN_W%-VIL_WIN_X%,VIL_WIN_Z%-VIL_WIN_Y%)                          ,PSET,%VIL_VWM_CB%,BF
  439. 15876 RETURN
  440. 15878 ' 
  441. 15880 *VIL_VWM_CHECK
  442. 15882 ' ウィンドウマネージャ呼出しチェック
  443. 15884 '    MSEL_M/MSEL_IN/INP_STRの呼出し直後に呼び出すことにより、
  444. 15886 '      ・ウィンドウ枠の各スイッチを左クリック : VWM_WIN  を呼出
  445. 15888 '      ・ウィンドウマネージャ起動キーを入力   : VWM_MENU を呼出
  446. 15890 '入力変数         : MX%,MY%       : マウスクリック位置
  447. 15892 '                 : KN%           : 入力番号
  448. 15894 '                 : KY%           : 入力キー
  449. 15896 '破壊変数         : なし
  450. 15898 '出力変数         : VWM_R%        : マネージャ処理結果
  451. 15900 '                                     0:処理なし
  452. 15902 '                                     2:CLOSE
  453. 15904 '                                     4:HIDE
  454. 15906 '                                     8:MOVE
  455. 15908 '                                    16:RESIZE
  456. 15910 '                                  4096:XSCRLBAR
  457. 15912 '                                  8192:YSCRLBAR
  458. 15914 '呼出しモジュール : VWM_WIN,VWM_MENU
  459. 15916 '
  460. 15918 VIL_VWM_R%=0
  461. 15920 IF VIL_KN%=-2 THEN                'ボックス外クリック
  462. 15922   GOSUB *VIL_VWM_WIN
  463. 15924 ELSE IF VIL_VKEY_KY%=-13 THEN
  464. 15926   VIL_WIN_X%=VIL_WIN_W%   +(VIL_WIN_W%-582)*(VIL_WIN_W%>582) '49+8-639
  465. 15928   VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%- 46)*(VIL_WIN_Y%< 46)                                           +(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
  466. 15930 '                                             -32-14 , -32+98+7-479
  467. 15932   GOSUB *VIL_VWM_MENU
  468. 15934 ENDIF
  469. 15936 RETURN
  470. 15938 '
  471. 15940 *VIL_VWM_WIN
  472. 15942 ' ウィンドウスイッチ版ウィンドウマネージャ
  473. 15944 '入力変数         : MX%,MY%       : マウスクリック位置
  474. 15946 '破壊変数         : なし
  475. 15948 '出力変数         : VWM_R%        : マネージャ処理結果
  476. 15950 '                                     0:処理なし
  477. 15952 '                                     2:CLOSE
  478. 15954 '                                     4:HIDE
  479. 15956 '                                     8:MOVE
  480. 15958 '                                    16:RESIZE
  481. 15960 '                                  4096:XSCRLBAR
  482. 15962 '                                  8192:YSCRLBAR
  483. 15964 '呼出しモジュール : VWM_CLOSE,VWM_HIDE,VWM_MOVE,VWM_RESIZE,
  484. 15966 '                   VWM_XSCRLBAR,VWM_YSCRLBAR,VWM_MENU
  485. 15968 '
  486. 15970 VIL_VWM_R%=0
  487. 15972 IF      (VIL_VWM_AT% AND    2)=    2                                              AND VIL_WIN_X%-2 <VIL_MX% AND VIL_MX%<VIL_WIN_X%+12                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
  488. 15974   GOSUB *VIL_VWM_CLOSE
  489. 15976 ELSE IF (VIL_VWM_AT% AND    4)=    4                                              AND VIL_WIN_X%+11<VIL_MX% AND VIL_MX%<VIL_WIN_X%+25                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
  490. 15978   GOSUB *VIL_VWM_HIDE
  491. 15980 ELSE IF (VIL_VWM_AT% AND    1)=    1                                              AND VIL_WIN_W%-25<VIL_MX% AND VIL_MX%<VIL_WIN_W%-11                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
  492. 15982   VIL_WIN_X%=VIL_WIN_W%   +(VIL_WIN_W%-582)*(VIL_WIN_W%>582) '49+8-639
  493. 15984   VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%- 46)*(VIL_WIN_Y%< 46)                                           +(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
  494. 15986 '                                              -32-14 , -32+98+7-479
  495. 15988   GOSUB *VIL_VWM_MENU
  496. 15990 ELSE IF (VIL_VWM_AT% AND   16)=   16                                              AND VIL_WIN_W%-12<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 2                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
  497. 15992   GOSUB *VIL_VWM_RESIZE
  498. 15994 ELSE IF (VIL_VWM_AT% AND    8)=    8                                              AND VIL_WIN_X%- 6<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 6                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
  499. 15996   GOSUB *VIL_VWM_MOVE
  500. 15998 ELSE IF (VIL_VWM_AT% AND 4096)= 4096                                              AND VIL_WIN_X%- 2<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 2                          AND VIL_WIN_Z%   <VIL_MY% AND VIL_MY%<VIL_WIN_Z%+16 THEN
  501. 16000   GOSUB *VIL_VWM_XSCRLBAR
  502. 16002 ELSE IF (VIL_VWM_AT% AND 8192)= 8192                                              AND VIL_WIN_W%+ 2<VIL_MX% AND VIL_MX%<VIL_WIN_W%+14                          AND VIL_WIN_Y%- 1<VIL_MY% AND VIL_MY%<VIL_WIN_Z%+ 1 THEN
  503. 16004   GOSUB *VIL_VWM_YSCRLBAR
  504. 16006 ENDIF
  505. 16008 RETURN
  506. 16010 '
  507. 16012 *VIL_VWM_MENU
  508. 16014 ' メニュー版ウィンドウマネージャ
  509. 16016 '
  510. 16018 '入力変数         : WIN_X%,WIN_Y% : マネージャウィンドウ左上隅座標
  511. 16020 '破壊変数         : なし
  512. 16022 '出力変数         : VWM_R%        : マネージャ処理結果
  513. 16024 '                                     0:処理なし
  514. 16026 '                                     2:CLOSE
  515. 16028 '                                     4:HIDE
  516. 16030 '                                     8:MOVE
  517. 16032 '                                    16:RESIZE
  518. 16034 '                                  4096:XSCRLBAR
  519. 16036 '                                  8192:YSCRLBAR
  520. 16038 '呼出しモジュール :   WIN_PMA,WIN_PMR,VWM_OP,VWM_CL,MSEL_M,
  521. 16040 '                     VWM_CLOSE,VWM_HIDE,VWM_MOVE,VWM_RESIZE,
  522. 16042 '                     VWM_XSCRLBAR,VWM_YSCRLBAR
  523. 16044 '                     VWM_KHIDE,VWM_KMOVE,VWM_KRESIZE,
  524. 16046 '                     VWM_INF
  525. 16048 '
  526. 16050 GOSUB *VIL_WIN_PMA
  527. 16052 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4),XOR,%3,BF
  528. 16054 VIL_VWM_ATB%=VIL_VWM_AT%
  529. 16056 VIL_WIN_W%=VIL_WIN_X%+49:VIL_WIN_Z%=VIL_WIN_Y%+97
  530. 16058 VIL_VWM_T$="VWM":VIL_VWM_AT%=0:VIL_VWM_N%=0
  531. 16060 GOSUB *VIL_VWM_OP
  532. 16062 SYMBOL(5,  0),"<VWM>", 1,1,6
  533. 16064 SYMBOL(1, 20),"CLOSE", 1,1,%1-((VIL_VWM_ATB% AND  2)= 2)*2
  534. 16066 SYMBOL(1, 36),"HIDE",  1,1,%1-((VIL_VWM_ATB% AND  4)= 4)*2
  535. 16068 SYMBOL(1, 52),"MOVE",  1,1,%1-((VIL_VWM_ATB% AND  8)= 8)*2
  536. 16070 SYMBOL(1, 68),"RESIZE",1,1,%1-((VIL_VWM_ATB% AND 16)=16)*2
  537. 16072 SYMBOL(1, 84),"<INFO>",1,1,%3
  538. 16074 '
  539. 16076 VIL_X%=1:VIL_Y%=20:VIL_W%=VIL_X%+47:VIL_Z%=VIL_Y%+14
  540. 16078 VIL_YL%=16:VIL_XN%=1:VIL_YN%=5:VIL_MSEL_BD%=0:VIL_C%=15
  541. 16080 VIL_MSEL_BC%=0:VIL_MSEL_MN%=0:VIL_MSEL_BN%=1
  542. 16082 VIL_MSEL_BB%=1:VIL_MSEL_BE%=5
  543. 16084 *VIL_VWM_MENU_W0
  544. 16086 GOSUB *VIL_MSEL_M
  545. 16088 IF VIL_KN%=-3 OR (0<VIL_KN% AND VIL_KN%<5                                                                AND (VIL_VWM_ATB% AND 2^VIL_KN%)=0)                THEN *VIL_VWM_MENU_W0
  546. 16090 GOSUB *VIL_VWM_CL
  547. 16092 GOSUB *VIL_WIN_PMA
  548. 16094 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4),XOR,%3,BF
  549. 16096 GOSUB *VIL_WIN_PMR
  550. 16098 IF VIL_KN%<1 THEN RETURN
  551. 16100 '
  552. 16102 ON VIL_KN% GOTO *VIL_VWM_MENU_W1,*VIL_VWM_MENU_W2,*VIL_VWM_MENU_W3,                          *VIL_VWM_MENU_W4,*VIL_VWM_MENU_W5
  553. 16104 '
  554. 16106 *VIL_VWM_MENU_W1
  555. 16108 GOSUB *VIL_VWM_CLOSE
  556. 16110 RETURN
  557. 16112 '
  558. 16114 *VIL_VWM_MENU_W2
  559. 16116 IF VIL_VKEY_KY%=-4 THEN GOSUB *VIL_VWM_HIDE ELSE GOSUB *VIL_VWM_KHIDE
  560. 16118 RETURN
  561. 16120 '
  562. 16122 *VIL_VWM_MENU_W3
  563. 16124 IF VIL_VKEY_KY%=-4 THEN
  564. 16126   VIL_MX%=(VIL_WIN_X%+VIL_WIN_W%)\2:VIL_MY%=VIL_WIN_Y%-4
  565. 16128   MOUSE 1,VIL_MX%,VIL_MY%
  566. 16130   GOSUB *VIL_VWM_MOVE
  567. 16132 ELSE
  568. 16134   GOSUB *VIL_VWM_KMOVE
  569. 16136 ENDIF
  570. 16138 RETURN
  571. 16140 '
  572. 16142 *VIL_VWM_MENU_W4
  573. 16144 IF VIL_VKEY_KY%=-4 THEN
  574. 16146   VIL_MX%=VIL_WIN_W%:VIL_MY%=VIL_WIN_Y%-6
  575. 16148   MOUSE 1,VIL_MX%,VIL_MY%
  576. 16150   GOSUB *VIL_VWM_RESIZE
  577. 16152 ELSE
  578. 16154   GOSUB *VIL_VWM_KRESIZE
  579. 16156 ENDIF
  580. 16158 RETURN
  581. 16160 '
  582. 16162 *VIL_VWM_MENU_W5
  583. 16164 VIL_WIN_X%=VIL_WIN_X%+(VIL_WIN_X%-448)*(VIL_WIN_X%>448)   '183+8-639
  584. 16166 VIL_WIN_Y%=VIL_WIN_Y%+(VIL_WIN_Y%-380)*(VIL_WIN_Y%>380)   ' 91+8-479
  585. 16168 GOSUB *VIL_VWM_INF
  586. 16170 RETURN
  587. 16172 '
  588. 16174 *VIL_VWM_INF
  589. 16176 ' ウィンドウ情報表示
  590. 16178 '入力変数         : WIN_X%,WIN_Y% : 情報ウィンドウ左上隅座標
  591. 16180 '破壊変数         : なし
  592. 16182 '出力変数         : E%            : 0 : 正常終了
  593. 16184 '                                   5 : オープン失敗(退避領域不足)
  594. 16186 '呼出しモジュール :   VWM_OP,VWM_CL,INP_MVWAIT
  595. 16188 '
  596. 16190 VIL_WIN_W%=VIL_WIN_X%+183:VIL_WIN_Z%=VIL_WIN_Y%+91
  597. 16192 VIL_VWM_T$="VWM INFORMATION":VIL_VWM_AT%=0:VIL_VWM_N%=0
  598. 16194 VIL_E%=0
  599. 16196 GOSUB *VIL_VWM_OP
  600. 16198 IF VIL_E%=0 THEN
  601. 16200   SYMBOL(8, 8),"POSITION:("                                                                +FNVIL_P2S0$(VIL_WIN_X%(VIL_WIN_AN%-1),3)+","                                +FNVIL_P2S0$(VIL_WIN_Y%(VIL_WIN_AN%-1),3)+")",1,1,4
  602. 16202   SYMBOL(8,28),"SIZE    : "+FNVIL_P2S0$(VIL_WIN_W%(VIL_WIN_AN%-1)              -VIL_WIN_X%(VIL_WIN_AN%-1)+1,3)+"×"+FNVIL_P2S0$(VIL_WIN_Z%(                 VIL_WIN_AN%-1)-VIL_WIN_Y%(VIL_WIN_AN%-1)+1,3),1,1,4
  603. 16204   SYMBOL(8,48),"WINDOW  : "+FNVIL_P2S0$(VIL_WIN_AN%-1,3)+"/"                                            +FNVIL_P2S0$(VIL_WIN_ANMAX%,3),1,1,4
  604. 16206   SYMBOL(8,68),"FREE    : "                                                    +FNVIL_P2S0$((VIL_WIN_BFMAX&-VIL_WIN_BFO&(VIL_WIN_AN%-1))\512,4)+"K/"        +FNVIL_P2S0$( VIL_WIN_BFMAX&\512,4)+"K",1,1,4
  605. 16208   GOSUB *VIL_INP_MVWAIT
  606. 16210   GOSUB *VIL_VWM_CL
  607. 16212 ENDIF
  608. 16214 RETURN
  609. 16216 '
  610. 16218 *VIL_VWM_MOVE
  611. 16220 ' ウィンドウ移動(ユーザ・インタフェース部)
  612. 16222 '
  613. 16224 '入力変数         : なし
  614. 16226 '破壊変数         : W0,W1       : 移動量
  615. 16228 '                   W2,W3       : W0,W1 → VWM_XD%,VWM_YD% の定数倍
  616. 16230 '                   MX,MY       : マウス位置
  617. 16232 '出力変数         : E%          : 0 : 移動正常終了
  618. 16234 '                                 5 : 移動失敗(退避領域不足)
  619. 16236 '                   VWM_R%      : 8 : 移動実行
  620. 16238 '                                 0 : 移動中止(中止操作/移動失敗)
  621. 16240 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_MV
  622. 16242 '
  623. 16244 MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
  624. 16246 MOUSE 1,VIL_MX%,VIL_MY%,1
  625. 16248 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  626. 16250 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%
  627. 16252 VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
  628. 16254 MOUSE 4,                                                                           VIL_VWM_XM%+VIL_MX%-VIL_WIN_X%,VIL_VWM_YM%+VIL_MY%-VIL_WIN_Y%,               VIL_VWM_WM%+VIL_MX%-VIL_WIN_W%,VIL_VWM_ZM%+VIL_MY%-VIL_WIN_Z%
  629. 16256 VIL_W0%=0:VIL_W1%=0:VIL_W2%=0:VIL_W3%=0
  630. 16258 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%
  631. 16260 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  632. 16262 WHILE MOUSE(2,0)
  633. 16264   VIL_MX%=MOUSE(9):VIL_MY%=MOUSE(10)
  634. 16266   IF VIL_MX% OR VIL_MY% THEN
  635. 16268     LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)                                 -STEP(VIL_WIN_W%        ,VIL_WIN_Z%),XOR,7,B
  636. 16270     VIL_W0%=VIL_W0%+VIL_MX%:VIL_W1%=VIL_W1%+VIL_MY%
  637. 16272     VIL_W2%=VIL_W0%-VIL_W0% MOD VIL_VWM_XD%
  638. 16274     VIL_W3%=VIL_W1%-VIL_W1% MOD VIL_VWM_YD%
  639. 16276     LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)                                 -STEP(VIL_WIN_W%        ,VIL_WIN_Z%),XOR,7,B
  640. 16278   ENDIF
  641. 16280 WEND
  642. 16282 VIL_WIN_X%=VIL_WIN_X%+VIL_W2%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_W3%
  643. 16284 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  644. 16286 '
  645. 16288 IF MOUSE(2,1) THEN                               '移動中止
  646. 16290   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):                                          VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  647. 16292   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):                                          VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  648. 16294 ELSE                                             '移動実行
  649. 16296   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  650. 16298   GOSUB *VIL_VWM_MV
  651. 16300 ENDIF
  652. 16302 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  653. 16304 MOUSE 4,0,0,639,479
  654. 16306 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  655. 16308 RETURN
  656. 16310 '
  657. 16312 *VIL_VWM_KMOVE
  658. 16314 ' ウィンドウ移動(キー操作版ユーザ・インタフェース部)
  659. 16316 '
  660. 16318 '入力変数         : なし
  661. 16320 '破壊変数         : K$,KY%        : 入力キーとそのアスキーコード
  662. 16322 '出力変数         : E%            : 0 : 移動正常終了
  663. 16324 '                                   5 : 移動失敗(退避領域不足)
  664. 16326 '                   VWM_R%        : 8 : 移動実行
  665. 16328 '                                   0 : 移動中止(中止操作/移動失敗)
  666. 16330 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_MV,VKEY_KY
  667. 16332 '
  668. 16334 WHILE INKEY$<>"":WEND             '先行入力除去
  669. 16336 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  670. 16338 VIL_WIN_X%=VIL_WIN_X%           -VIL_WIN_LB%
  671. 16340 VIL_WIN_Y%=VIL_WIN_Y%           -VIL_WIN_UB%
  672. 16342 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%+VIL_WIN_RB%
  673. 16344 VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%+VIL_WIN_DB%
  674. 16346 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  675. 16348 VIL_VKEY_KY%=0
  676. 16350 WHILE VIL_VKEY_KY%<>-1 AND VIL_VKEY_KY%<>-2         '決定/取消キー
  677. 16352 *VIL_VWM_KMOVE_W0
  678. 16354   GOSUB *VIL_VKEY_KY
  679. 16356   IF VIL_VKEY_KY%=-4 THEN *VIL_VWM_KMOVE_W0
  680. 16358   LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  681. 16360   VIL_WIN_X%=VIL_WIN_X%                                                                  +((VIL_VKEY_KY%=-6)-(VIL_VKEY_KY%=-5))*VIL_VWM_XD% '←→
  682. 16362   VIL_WIN_X%=VIL_WIN_X%-((VIL_WIN_X%+VIL_WIN_LB%<VIL_VWM_XM%)                            -(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-VIL_WIN_RB%))                             *VIL_VWM_XD%
  683. 16364   VIL_WIN_X%=VIL_WIN_X%                                                                  +((VIL_VKEY_KY%=-10)-(VIL_VKEY_KY%=-9))*VIL_VWM_XD%*8
  684. 16366 '                                                     拡張←→
  685. 16368   VIL_WIN_X%=VIL_WIN_X%-((VIL_WIN_X%+VIL_WIN_LB%<VIL_VWM_XM%)                            -(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-VIL_WIN_RB%))                             *VIL_VWM_XD%*8
  686. 16370 '
  687. 16372   VIL_WIN_Y%=VIL_WIN_Y%                                                                  +((VIL_VKEY_KY%=-7)-(VIL_VKEY_KY%=-8))*VIL_VWM_YD% '↑↓
  688. 16374   VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+VIL_WIN_UB%<VIL_VWM_YM%)                            -(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-VIL_WIN_DB%))                             *VIL_VWM_YD%
  689. 16376   VIL_WIN_Y%=VIL_WIN_Y%+((VIL_VKEY_KY%=-11)                                                          -(VIL_VKEY_KY%=-12))*VIL_VWM_YD%*8
  690. 16378 '                                                     拡張↑↓
  691. 16380   VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+VIL_WIN_UB%<VIL_VWM_YM%)                            -(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-VIL_WIN_DB%))                            *VIL_VWM_YD%*8
  692. 16382   LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  693. 16384 WEND
  694. 16386 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  695. 16388 '
  696. 16390 IF VIL_VKEY_KY%=-2 THEN                       '移動実行(決定)
  697. 16392   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  698. 16394   GOSUB *VIL_VWM_MV
  699. 16396 ELSE                                          '移動中止(取消)
  700. 16398   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  701. 16400   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  702. 16402   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  703. 16404   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  704. 16406 ENDIF
  705. 16408 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  706. 16410 RETURN
  707. 16412 '
  708. 16414 *VIL_VWM_MV
  709. 16416 ' ウィンドウ移動(移動処理)
  710. 16418 '
  711. 16420 '入力変数         : WIN_X,WIN_Y   : 移動先ウィンドウ左上隅座標
  712. 16422 '破壊変数         : W0%,W1%,      : 座標一時格納
  713. 16424 '                   W2%,W3%
  714. 16426 '出力変数         : E%            : 0 : 移動正常終了
  715. 16428 '                                   5 : 移動失敗(退避領域不足)
  716. 16430 '                     E%=0 のとき
  717. 16432 '                       WIN_W%,WIN_Z% : 移動先のウィンドウ右下隅座標
  718. 16434 '                       VWM_R%        : 8 : 移動実行
  719. 16436 '                     E%=5 のとき
  720. 16438 '                       WIN_X%,WIN_Y% : 移動前のウィンドウ左上隅座標
  721. 16440 '                       VWM_R%        : 0 : 移動失敗
  722. 16442 '呼出しモジュール : なし
  723. 16444 '
  724. 16446 VIL_E%=0
  725. 16448 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  726. 16450 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  727. 16452 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)         'ウィンドウ保存
  728. 16454 IF VIL_E%=0 THEN
  729. 16456   VIL_WIN_W%=VIL_WIN_X%+VIL_WIN_W%(VIL_WIN_AN%)                                                     -VIL_WIN_X%(VIL_WIN_AN%)
  730. 16458   VIL_WIN_Z%=VIL_WIN_Y%+VIL_WIN_Z%(VIL_WIN_AN%)                                                     -VIL_WIN_Y%(VIL_WIN_AN%)
  731. 16460   PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1) '背景復元
  732. 16462   GET@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)                             -(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),                              VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)     '移動先背景保存
  733. 16464   PUT@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)                             -(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),                              VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
  734. 16466 '                                              移動先にウィンドウ表示
  735. 16468   VIL_WIN_X%(VIL_WIN_AN%)=VIL_WIN_X%
  736. 16470   VIL_WIN_Y%(VIL_WIN_AN%)=VIL_WIN_Y%
  737. 16472   VIL_WIN_W%(VIL_WIN_AN%)=VIL_WIN_W%
  738. 16474   VIL_WIN_Z%(VIL_WIN_AN%)=VIL_WIN_Z%
  739. 16476   VIL_VWM_R%=8
  740. 16478 ELSE
  741. 16480   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  742. 16482   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  743. 16484   VIL_VWM_R%=0
  744. 16486 ENDIF
  745. 16488 RETURN
  746. 16490 '
  747. 16492 *VIL_VWM_CLOSE
  748. 16494 ' ウィンドウ・クローズ
  749. 16496 '
  750. 16498 '入力変数         : なし
  751. 16500 '破壊変数         : なし
  752. 16502 '出力変数         : VWM_R%        : 2 : クローズ正常終了
  753. 16504 '呼出しモジュール : VWM_CL
  754. 16506 '
  755. 16508 GOSUB *VIL_VWM_CL
  756. 16510 VIL_VWM_R%=2
  757. 16512 RETURN
  758. 16514 '
  759. 16516 *VIL_VWM_HIDE
  760. 16518 ' ウィンドウ一時消去(ユーザインタフェース部)
  761. 16520 '
  762. 16522 '入力変数         : なし
  763. 16524 '破壊変数         : なし
  764. 16526 '出力変数         : E%            : 0 : 一時消去正常終了
  765. 16528 '                                   5 : 一時消去失敗(退避領域不足)
  766. 16530 '                   VWM_R%        : 4 : 一時消去実行
  767. 16532 '                                   0 : 一時消去中止(一時消去失敗)
  768. 16534 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_HD0,VWM_HD1
  769. 16536 '
  770. 16538 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  771. 16540 GOSUB *VIL_VWM_HD0
  772. 16542 IF VIL_E%=0 THEN
  773. 16544   WHILE MOUSE(2,0):WEND
  774. 16546   GOSUB *VIL_VWM_HD1
  775. 16548   VIL_VWM_R%=4
  776. 16550 ELSE
  777. 16552   VIL_VWM_R%=0
  778. 16554 ENDIF
  779. 16556 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  780. 16558 RETURN
  781. 16560 '
  782. 16562 *VIL_VWM_KHIDE
  783. 16564 ' ウィンドウ一時消去(キーボード操作版ユーザインタフェース部)
  784. 16566 '
  785. 16568 '入力変数         : なし
  786. 16570 '破壊変数         : なし
  787. 16572 '出力変数         : E%            : 0 : 一時消去正常終了
  788. 16574 '                                   5 : 一時消去失敗(退避領域不足)
  789. 16576 '                   VWM_R%        : 4 : 一時消去実行
  790. 16578 '                                   0 : 一時消去中止(一時消去失敗)
  791. 16580 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_HD0,VWM_HD1,VKEY_KY
  792. 16582 '
  793. 16584 WHILE INKEY$<>"":WEND
  794. 16586 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  795. 16588 GOSUB *VIL_VWM_HD0
  796. 16590 IF VIL_E%=0 THEN
  797. 16592   VIL_VKEY_KY%=-4:WHILE VIL_VKEY_KY%=-4:GOSUB *VIL_VKEY_KY:WEND
  798. 16594   GOSUB *VIL_VWM_HD1
  799. 16596   VIL_VWM_R%=4
  800. 16598 ENDIF
  801. 16600 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  802. 16602 RETURN
  803. 16604 '
  804. 16606 *VIL_VWM_HD0
  805. 16608 ' ウィンドウ一時消去(ウィンドウ一時退避処理)
  806. 16610 '
  807. 16612 '入力変数         : なし
  808. 16614 '破壊変数         : W0%,W1%,      : 座標一時格納
  809. 16616 '                   W2%,W3%
  810. 16618 '出力変数         : E%            : 0 : 一時消去正常終了
  811. 16620 '                                   5 : 一時消去失敗(退避領域不足)
  812. 16622 '呼出しモジュール : なし
  813. 16624 '
  814. 16626 VIL_E%=0
  815. 16628 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  816. 16630 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  817. 16632 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)     'ウィンドウ保存
  818. 16634 IF VIL_E%=0 THEN
  819. 16636   PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)   '背景復元
  820. 16638 ENDIF
  821. 16640 RETURN
  822. 16642 '
  823. 16644 *VIL_VWM_HD1
  824. 16646 ' ウィンドウ一時消去(ウィンドウ再表示処理)
  825. 16648 '
  826. 16650 '入力変数         : なし
  827. 16652 '破壊変数         : W0%,W1%,      : 座標一時格納
  828. 16654 '                   W2%,W3%
  829. 16656 '出力変数         : なし
  830. 16658 '呼出しモジュール : なし
  831. 16660 '
  832. 16662 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  833. 16664 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  834. 16666   PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)   'ウィンドウ再表示
  835. 16668 RETURN
  836. 16670 '
  837. 16672 *VIL_VWM_HD2
  838. 16674 ' ウィンドウ一時消去(再退避・ウィンドウ再表示)
  839. 16676 '
  840. 16678 '入力変数         :   なし
  841. 16680 '破壊変数         : W0%,W1%,      : 座標一時格納
  842. 16682 '                   W2%,W3%
  843. 16684 '出力変数         :   なし
  844. 16686 '呼出しモジュール :   なし
  845. 16688 '
  846. 16690 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
  847. 16692 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
  848. 16694 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1) '退避した画面情報を更新
  849. 16696 PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)   'ウィンドウ再表示
  850. 16698 RETURN
  851. 16700 '
  852. 16702 *VIL_VWM_RESIZE
  853. 16704 ' ウィンドウ・サイズ変更(ユーザインタフェース部)
  854. 16706 '
  855. 16708 '入力変数         : なし
  856. 16710 '破壊変数         : W0%           : 1:左辺移動 2:右辺移動
  857. 16712 '                   W1%           : 1:上辺移動 2:下辺移動
  858. 16714 '                   W2%,W3%       : 座標修正用
  859. 16716 '                   MX%,MY%       : マウス位置
  860. 16718 '出力変数         : E%            : 0 : サイズ変更正常終了
  861. 16720 '                                   5 : サイズ変更失敗(退避領域不足)
  862. 16722 '                   VWM_R%        : 16 : サイズ変更実行
  863. 16724 '                                    0 : サイズ変更中止
  864. 16726 '                                        (中止操作/サイズ変更失敗)
  865. 16728 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_RS
  866. 16730 '
  867. 16732 MOUSE 2,VIL_VWM_MCA2$,VIL_VWM_MCD2$,VIL_VWM_MCX2%,VIL_VWM_MCY2%
  868. 16734 MOUSE 1,VIL_MX%,VIL_MY%,1
  869. 16736 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  870. 16738 '
  871. 16740 VIL_W0%=VIL_WIN_W%-VIL_VWM_WL%-VIL_VWM_XM%+1
  872. 16742 VIL_W1%=VIL_WIN_Z%-VIL_VWM_ZL%-VIL_VWM_YM%+1
  873. 16744 VIL_W2%=VIL_WIN_X%+VIL_VWM_WL%-VIL_VWM_WM%-1
  874. 16746 VIL_W3%=VIL_WIN_Y%+VIL_VWM_ZL%-VIL_VWM_ZM%-1
  875. 16748 VIL_W0%=VIL_VWM_XM%-VIL_W0%*(VIL_W0%>0)
  876. 16750 VIL_W1%=VIL_VWM_YM%-VIL_W1%*(VIL_W1%>0)
  877. 16752 VIL_W2%=VIL_VWM_WM%-VIL_W2%*(VIL_W2%<0)
  878. 16754 VIL_W3%=VIL_VWM_ZM%-VIL_W3%*(VIL_W3%<0)
  879. 16756 MOUSE 4,VIL_W0%,VIL_W1%,VIL_W2%,VIL_W3%
  880. 16758 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%:         VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
  881. 16760 '
  882. 16762 VIL_W0%=0:VIL_W1%=0
  883. 16764 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  884. 16766 WHILE MOUSE(2,0)
  885. 16768   IF MOUSE(9) OR MOUSE(10) THEN
  886. 16770     VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
  887. 16772     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  888. 16774     IF VIL_MX%<=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB% THEN
  889. 16776       VIL_WIN_X%=VIL_MX%+(VIL_WIN_X%-VIL_MX%) MOD VIL_VWM_WD%
  890. 16778       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W0%=1
  891. 16780     ELSE IF VIL_MX%>=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB% THEN
  892. 16782       VIL_WIN_W%=VIL_MX%-(VIL_MX%-VIL_WIN_W%) MOD VIL_VWM_WD%
  893. 16784       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
  894. 16786     ELSE
  895. 16788       IF VIL_W0%=1 THEN
  896. 16790         VIL_W2%=VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)                                     -VIL_MX%
  897. 16792         VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%<0)
  898. 16794         VIL_WIN_X%=VIL_W2%+(VIL_WIN_X%-VIL_W2%) MOD VIL_VWM_WD%
  899. 16796       ELSE IF VIL_W0%=2 THEN
  900. 16798         VIL_W2%=VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)                                     -VIL_MX%
  901. 16800         VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%>0)
  902. 16802         VIL_WIN_W%=VIL_W2%-(VIL_W2%-VIL_WIN_W%) MOD VIL_VWM_WD%
  903. 16804       ENDIF
  904. 16806     ENDIF
  905. 16808 '
  906. 16810     IF VIL_MY%<=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB% THEN
  907. 16812       VIL_WIN_Y%=VIL_MY%+(VIL_WIN_Y%-VIL_MY%) MOD VIL_VWM_ZD%
  908. 16814       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
  909. 16816     ELSE IF VIL_MY%>=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB% THEN
  910. 16818       VIL_WIN_Z%=VIL_MY%-(VIL_MY%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
  911. 16820       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
  912. 16822     ELSE
  913. 16824       IF VIL_W1%=1 THEN
  914. 16826         VIL_W2%=VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)                                     -VIL_MY%
  915. 16828         VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%<0)
  916. 16830         VIL_WIN_Y%=VIL_W2%+(VIL_WIN_Y%-VIL_W2%) MOD VIL_VWM_ZD
  917. 16832       ELSE IF VIL_W1%=2 THEN
  918. 16834         VIL_W2%=VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)                                     -VIL_MY%
  919. 16836         VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%>0)
  920. 16838         VIL_WIN_Z%=VIL_W2%-(VIL_W2%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
  921. 16840       ENDIF
  922. 16842     ENDIF
  923. 16844     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  924. 16846   ENDIF
  925. 16848 WEND
  926. 16850 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  927. 16852 IF MOUSE(2,1) THEN
  928. 16854   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  929. 16856   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  930. 16858   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  931. 16860   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  932. 16862 ELSE
  933. 16864   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  934. 16866   VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_DB%
  935. 16868   GOSUB *VIL_VWM_RS
  936. 16870 ENDIF
  937. 16872 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  938. 16874 MOUSE 4,0,0,639,479
  939. 16876 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  940. 16878 RETURN
  941. 16880 '
  942. 16882 *VIL_VWM_KRESIZE
  943. 16884 ' ウィンドウ・サイズ変更(キー操作版ユーザインタフェース部)
  944. 16886 '
  945. 16888 '入力変数         : なし
  946. 16890 '破壊変数         : W0%           : 1:左辺移動 2:右辺移動
  947. 16892 '                   W1%           : 1:上辺移動 2:下辺移動
  948. 16894 '                   W2%,W3%,      : サイズ変更可能範囲
  949. 16896 '                   W4%,W5%
  950. 16898 '                   W6%           : 座標変化分
  951. 16900 '                   K$,KY%        : 入力キーとそのアスキーコード
  952. 16902 '出力変数         : E%            : 0 : サイズ変更正常終了
  953. 16904 '                                   5 : サイズ変更失敗(退避領域不足)
  954. 16906 '                   VWM_R%        : 16 : サイズ変更実行
  955. 16908 '                                    0 : サイズ変更中止
  956. 16910 '                                        (中止操作/サイズ変更失敗)
  957. 16912 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_RS
  958. 16914 '
  959. 16916 WHILE INKEY$<>"":WEND
  960. 16918 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  961. 16920 '
  962. 16922 VIL_W2%=VIL_WIN_W%-VIL_VWM_WL%-VIL_VWM_XM%+1
  963. 16924 VIL_W3%=VIL_WIN_Z%-VIL_VWM_ZL%-VIL_VWM_YM%+1
  964. 16926 VIL_W4%=VIL_WIN_X%+VIL_VWM_WL%-VIL_VWM_WM%-1
  965. 16928 VIL_W5%=VIL_WIN_Y%+VIL_VWM_ZL%-VIL_VWM_ZM%-1
  966. 16930 VIL_W2%=VIL_VWM_XM%-VIL_W2%*(VIL_W2%>0)
  967. 16932 VIL_W3%=VIL_VWM_YM%-VIL_W3%*(VIL_W3%>0)
  968. 16934 VIL_W4%=VIL_VWM_WM%-VIL_W4%*(VIL_W4%<0)
  969. 16936 VIL_W5%=VIL_VWM_ZM%-VIL_W5%*(VIL_W5%<0)
  970. 16938 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%:         VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
  971. 16940 '
  972. 16942 VIL_W0%=2:VIL_W1%=1
  973. 16944 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  974. 16946 VIL_VKEY_KY%=0
  975. 16948 WHILE VIL_VKEY_KY%<>-1 AND VIL_VKEY_KY%<>-2       '取消 / 決定
  976. 16950 *VIL_VWM_KMOVE_W1
  977. 16952   GOSUB *VIL_VKEY_KY
  978. 16954   IF VIL_VKEY_KY%=-4 THEN *VIL_VWM_KMOVE_W1
  979. 16956   LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  980. 16958   VIL_W6%=((VIL_VKEY_KY%= -6)-(VIL_VKEY_KY%= -5))*VIL_VWM_WD%                         +((VIL_VKEY_KY%=-10)-(VIL_VKEY_KY%= -9))*VIL_VWM_WD%*8
  981. 16960 '                                                 ←→、拡張←→
  982. 16962   IF VIL_W0%=1 THEN                                   'MOVE WIN_X%
  983. 16964     VIL_WIN_X%=VIL_WIN_X%+VIL_W6%
  984. 16966     IF VIL_WIN_X%<VIL_W2% THEN
  985. 16968       VIL_WIN_W%=VIL_W4%-(VIL_W4%-VIL_WIN_W%) MOD VIL_VWM_WD%
  986. 16970       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
  987. 16972     ELSE IF VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)                          <VIL_WIN_X% THEN
  988. 16974       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
  989. 16976       VIL_WIN_W%=VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)                          +(VIL_WIN_W%-VIL_WIN_X%-VIL_VWM_XL%                                          -(VIL_WIN_LB%+VIL_WIN_RB%-1)) MOD VIL_VWM_WD%
  990. 16978     ENDIF
  991. 16980   ELSE                                                'MOVE WIN_W%
  992. 16982     VIL_WIN_W%=VIL_WIN_W%+VIL_W6%
  993. 16984     IF VIL_WIN_W%<VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)               THEN
  994. 16986       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+8:VIL_W0%=1
  995. 16988       VIL_WIN_X%=VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)                          +(VIL_WIN_X%-VIL_WIN_W%+VIL_VWM_XL%                                          +(VIL_WIN_LB%+VIL_WIN_RB%-1)) MOD VIL_VWM_WD%
  996. 16990     ELSE IF VIL_W4%<VIL_WIN_W% THEN
  997. 16992       VIL_WIN_X%=VIL_W2%-(VIL_W2%-VIL_WIN_X%) MOD VIL_VWM_WD%
  998. 16994       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W0%=1
  999. 16996     ENDIF
  1000. 16998   ENDIF
  1001. 17000 '
  1002. 17002    VIL_W6%=((VIL_VKEY_KY%= -7)-(VIL_VKEY_KY%= -8))*VIL_VWM_ZD%                         +((VIL_VKEY_KY%=-11)-(VIL_VKEY_KY%=-12))*VIL_VWM_ZD%*8
  1003. 17004 '                                                 ↑↓、拡張↑↓
  1004. 17006   IF VIL_W1%=1 THEN                                   'MOVE WIN_Y
  1005. 17008     VIL_WIN_Y%=VIL_WIN_Y%+VIL_W6%
  1006. 17010     IF VIL_WIN_Y%<VIL_W3% THEN
  1007. 17012       VIL_WIN_Z%=VIL_W5%-(VIL_W5%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
  1008. 17014       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
  1009. 17016     ELSE IF VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)                          <VIL_WIN_Y% THEN
  1010. 17018       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
  1011. 17020       VIL_WIN_Z%=VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)                          +(VIL_WIN_Z%-VIL_WIN_Y%-VIL_VWM_YL%                                          -(VIL_WIN_UB%+VIL_WIN_DB%-1)) MOD VIL_VWM_ZD%
  1012. 17022     ENDIF
  1013. 17024   ELSE                                                'MOVE WIN_Z
  1014. 17026     VIL_WIN_Z%=VIL_WIN_Z%+VIL_W6%
  1015. 17028     IF VIL_WIN_Z%<VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)               THEN
  1016. 17030       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
  1017. 17032       VIL_WIN_Y%=VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)                          +(VIL_WIN_Y%-VIL_WIN_Z%+VIL_VWM_YL%                                          +(VIL_WIN_UB%+VIL_WIN_DB%-1)) MOD VIL_VWM_ZD%
  1018. 17034     ELSE IF VIL_W5%<VIL_WIN_Z% THEN
  1019. 17036       VIL_WIN_Y%=VIL_W3%-(VIL_W3%-VIL_WIN_Y%) MOD VIL_VWM_ZD%
  1020. 17038       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
  1021. 17040     ENDIF
  1022. 17042   ENDIF
  1023. 17044   LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1024. 17046 WEND
  1025. 17048 '
  1026. 17050 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
  1027. 17052 IF VIL_VKEY_KY%=-2 THEN
  1028. 17054   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
  1029. 17056   VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_DB%
  1030. 17058   GOSUB *VIL_VWM_RS
  1031. 17060 ELSE
  1032. 17062   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1033. 17064   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1034. 17066   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  1035. 17068   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1036. 17070 ENDIF
  1037. 17072 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  1038. 17074 RETURN
  1039. 17076 '
  1040. 17078 *VIL_VWM_RS
  1041. 17080 ' ウィンドウ・サイズ変更実行
  1042. 17082 '
  1043. 17084 '入力変数         : WIN_X%,WIN_Y% : リサイズ後のウィンドウ左上隅座標
  1044. 17086 '                   WIN_W%,WIN_Z% : リサイズ後のウィンドウ右下隅座標
  1045. 17088 '破壊変数         : なし
  1046. 17090 '出力変数         : E%            : 0 : サイズ変更正常終了
  1047. 17092 '                                   5 : サイズ変更失敗(退避領域不足)
  1048. 17094 '                     E%=0 のとき
  1049. 17096 '                       VWM_R%        : 16 : サイズ変更実行
  1050. 17098 '                     E%=5 のとき
  1051. 17100 '                       WIN_X%,WIN_Y% : サイズ変更前の
  1052. 17102 '                       WIN_W%,WIN_Z% :  ウィンドウ左上・右下隅座標
  1053. 17104 '                       VWM_R%        : 0  : サイズ変更失敗
  1054. 17106 '呼出しモジュール :   WIN_PMA,WIN_PMR,VWM_OP,VWM_CL
  1055. 17108 '
  1056. 17110 VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%)                                                   +INT((INT((VIL_WIN_W%-VIL_WIN_X%+24)/8)                                           *(VIL_WIN_Z%-VIL_WIN_Y%+23)*4+1)/2)
  1057. 17112 IF VIL_WIN_BFO&(VIL_WIN_AN%+1)<VIL_WIN_BFO&(VIL_WIN_AN%) THEN
  1058. 17114   VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%) 
  1059. 17116 ENDIF
  1060. 17118 VIL_E%=0
  1061. 17120 GET@A(VIL_WIN_X%(VIL_WIN_AN%),VIL_WIN_Y%(VIL_WIN_AN%))                           -(VIL_WIN_W%(VIL_WIN_AN%),VIL_WIN_Z%(VIL_WIN_AN%))                            ,VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%+1)         'ウィンドウ保存
  1062. 17122 VIL_VWM_WX%=VIL_WIN_W%(VIL_WIN_AN%)-VIL_WIN_X%(VIL_WIN_AN%)
  1063. 17124 VIL_VWM_WY%=VIL_WIN_Z%(VIL_WIN_AN%)-VIL_WIN_Y%(VIL_WIN_AN%)
  1064. 17126 IF VIL_E%=0 THEN
  1065. 17128   VIL_WIN_X%(VIL_WIN_AN%+1)=VIL_WIN_X%        'リサイズ後の位置保存
  1066. 17130   VIL_WIN_Y%(VIL_WIN_AN%+1)=VIL_WIN_Y%
  1067. 17132   VIL_WIN_W%(VIL_WIN_AN%+1)=VIL_WIN_W%
  1068. 17134   VIL_WIN_Z%(VIL_WIN_AN%+1)=VIL_WIN_Z%
  1069. 17136   GOSUB *VIL_VWM_CL                           'ウィンドウを一旦閉じる
  1070. 17138 '
  1071. 17140   IF VIL_VWM_N% THEN
  1072. 17142     VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%(VIL_WIN_AN%+2)
  1073. 17144     VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%(VIL_WIN_AN%+2)
  1074. 17146     VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%(VIL_WIN_AN%+2)
  1075. 17148     VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%(VIL_WIN_AN%+2)
  1076. 17150   ELSE
  1077. 17152     VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%+2)
  1078. 17154     VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%+2)
  1079. 17156     VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%+2)
  1080. 17158     VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%+2)
  1081. 17160   ENDIF
  1082. 17162   VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%+1)
  1083. 17164   VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%+1)
  1084. 17166   GOSUB *VIL_VWM_OP
  1085. 17168   GOSUB *VIL_WIN_PMR
  1086. 17170   PUT@A(0,0)-(VIL_VWM_WX%,VIL_VWM_WY%)                                              ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%+1)
  1087. 17172 '                                               ウィンドウ再表示
  1088. 17174   GOSUB *VIL_WIN_PMA
  1089. 17176   VIL_VWM_R%=16
  1090. 17178 ELSE
  1091. 17180   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
  1092. 17182   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
  1093. 17184   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
  1094. 17186   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
  1095. 17188   VIL_VWM_R%=0
  1096. 17190 ENDIF
  1097. 17192 RETURN
  1098. 17194 '
  1099. 17196 *VIL_VWM_XSCRLBAR
  1100. 17198 ' 水平スクロールバー
  1101. 17200 '
  1102. 17202 '入力変数         : なし
  1103. 17204 '破壊変数         : なし
  1104. 17206 '呼出しモジュール : SBAR_XOP
  1105. 17208 '
  1106. 17210 VIL_SBAR_Y%=VIL_WIN_Z%+3
  1107. 17212 VIL_SBAR_X%=VIL_WIN_X%:VIL_SBAR_W%=VIL_WIN_W%
  1108. 17214 VIL_SBAR_LBL%=VIL_VWM_XLBL%:VIL_SBAR_LIL%=VIL_VWM_XLIL%
  1109. 17216 VIL_SBAR_LIP%=VIL_VWM_XLIP%:VIL_SBAR_LPL%=VIL_VWM_XLPL%
  1110. 17218 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  1111. 17220 GOSUB *VIL_SBAR_XOP
  1112. 17222 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  1113. 17224 VIL_VWM_XLIP%=VIL_SBAR_LIP%
  1114. 17226 IF VIL_SBAR_R% THEN VIL_VWM_R%=4096
  1115. 17228 RETURN
  1116. 17230 '
  1117. 17232 *VIL_VWM_YSCRLBAR
  1118. 17234 ' 垂直スクロールバー
  1119. 17236 '
  1120. 17238 '入力変数         : なし
  1121. 17240 '破壊変数         : なし
  1122. 17242 '呼出しモジュール : SBAR_YOP
  1123. 17244 '
  1124. 17246 VIL_SBAR_X%=VIL_WIN_W%+3
  1125. 17248 VIL_SBAR_Y%=VIL_WIN_Y%:VIL_SBAR_Z%=VIL_WIN_Z%
  1126. 17250 VIL_SBAR_LBL%=VIL_VWM_YLBL%:VIL_SBAR_LIL%=VIL_VWM_YLIL%
  1127. 17252 VIL_SBAR_LIP%=VIL_VWM_YLIP%:VIL_SBAR_LPL%=VIL_VWM_YLPL%
  1128. 17254 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
  1129. 17256 GOSUB *VIL_SBAR_YOP
  1130. 17258 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
  1131. 17260 VIL_VWM_YLIP%=VIL_SBAR_LIP%
  1132. 17262 IF VIL_SBAR_R% THEN VIL_VWM_R%=8192
  1133. 17264 RETURN
  1134. 17266 '
  1135. 17268 '--------------------  スクロールバー・パッケージ -----------
  1136. 17270 '必要パッケージ : ウィンドウマネージャ
  1137. 17272 '・スクロールバーの描画・操作入力処理
  1138. 17274 '
  1139. 17276 *VIL_SBAR_INITM
  1140. 17278 ' スクロールバー・パッケージ初期化
  1141. 17280 '
  1142. 17282 '入力変数         : なし
  1143. 17284 '破壊変数         : なし
  1144. 17286 '出力変数         : なし
  1145. 17288 '呼出しモジュール : なし
  1146. 17290 '
  1147. 17292 IF VIL_E%=0 THEN
  1148. 17294 'パッケージ変数
  1149. 17296 '   バー左右端X座標,上下端Y座標
  1150. 17298   VIL_SBAR_X%=0:VIL_SBAR_W%=0:VIL_SBAR_Y%=0:VIL_SBAR_Z%=0
  1151. 17300 '   インジケータ左右端X座標,上下端Y座標
  1152. 17302   VIL_SBAR_IX%=0:VIL_SBAR_IW%=0:VIL_SBAR_IY%=0:VIL_SBAR_IZ%=0
  1153. 17304 '   論理バー長,論理インジケータ長,論理インジケータ位置
  1154. 17306 '                                    (0~LBL-1)
  1155. 17308 '   論理ページ長
  1156. 17310   VIL_SBAR_LBL%=0:VIL_SBAR_LIL%=0:VIL_SBAR_LIP%=0:VIL_SBAR_LPL%=0
  1157. 17312 '   スクロールバー操作結果
  1158. 17314   VIL_SBAR_R%=0
  1159. 17316 ENDIF
  1160. 17318 RETURN
  1161. 17320 '
  1162. 17322 *VIL_SBAR_ENVR
  1163. 17324 ' アプリ環境ファイル読み込み
  1164. 17326 '
  1165. 17328 '入力変数         : なし
  1166. 17330 '破壊変数         : なし
  1167. 17332 '出力変数         : なし
  1168. 17334 '呼出しモジュール : LNR
  1169. 17336 '
  1170. 17338 VIL_W0$="":WHILE VIL_W0$<>"#SBAR":GOSUB *VIL_LNR:WEND
  1171. 17340 RETURN
  1172. 17342 '
  1173. 17344 *VIL_SBAR_ENVW
  1174. 17346 ' アプリ環境ファイル書き込み
  1175. 17348 '
  1176. 17350 '入力変数         : なし
  1177. 17352 '破壊変数         : なし
  1178. 17354 '出力変数         : なし
  1179. 17356 '呼出しモジュール : なし
  1180. 17358 '
  1181. 17360 PRINT #1,"#SBAR"
  1182. 17362 RETURN
  1183. 17364 '
  1184. 17366 *VIL_SBAR_XOP
  1185. 17368 ' 水平スクロールバー操作
  1186. 17370 '
  1187. 17372 '入力変数         : MX%,MY%       : マウスクリック位置
  1188. 17374 '                 : SBAR_X%,      : 左右端X座標
  1189. 17376 '                   SBAR_W%
  1190. 17378 '                   SBAR_Y%       : 上端Y座標
  1191. 17380 '                   SBAR_LBL%     : 論理バー長
  1192. 17382 '                   SBAR_LIL%     : 論理インジケータ長
  1193. 17384 '                   SBAR_LIP%     : 論理インジケータ位置
  1194. 17386 '                   SBAR_LPL%     : 論理ページ長
  1195. 17388 '破壊変数         : MX%,MY%       : マウス位置
  1196. 17390 '                   W0%           : SBAR_LIP%保存
  1197. 17392 '                   W1%           : インジケータ先端とMCのずれ
  1198. 17394 '出力変数         : VIL_SBAR_R%   : スクロールバー操作結果
  1199. 17396 '                                   0 : 操作無効/取消
  1200. 17398 '                                   1 : SBAR_LIP% 1減少
  1201. 17400 '                                   2 : SBAR_LIP% 1ページ減少
  1202. 17402 '                                   3 : SBAR_LIP% ドラッグにより変化
  1203. 17404 '                                   4 : SBAR_LIP% 1ページ増加
  1204. 17406 '                                   5 : SBAR_LIP% 1増加
  1205. 17408 '呼出しモジュール : SBAR_XIDRAW,SBAR_XIERASE
  1206. 17410 '
  1207. 17412 VIL_SBAR_R%=0
  1208. 17414 VIL_SBAR_IX%=VIL_SBAR_X%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1209. 17416 VIL_SBAR_IW%=VIL_SBAR_IX%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1210. 17418 IF VIL_MX%<VIL_SBAR_X%+13 THEN
  1211. 17420   IF VIL_SBAR_LIP%>0                                                             THEN GOSUB *VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-1:                       GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=1
  1212. 17422 ELSE IF VIL_MX%<VIL_SBAR_IX% THEN
  1213. 17424   GOSUB *VIL_SBAR_XIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%-VIL_SBAR_LPL%
  1214. 17426   IF VIL_SBAR_LIP%<0 THEN VIL_SBAR_LIP%=0
  1215. 17428   GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=2
  1216. 17430 ELSE IF VIL_MX%<VIL_SBAR_IW% THEN
  1217. 17432   MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
  1218. 17434   MOUSE 1,VIL_MX%,VIL_MY%,1
  1219. 17436   MOUSE 4,VIL_SBAR_X%+12+(VIL_MX%-VIL_SBAR_IX%),VIL_SBAR_Y%,                           VIL_SBAR_W%-12+(VIL_MX%-VIL_SBAR_IW%),VIL_SBAR_Y%+12
  1220. 17438   VIL_W0%=VIL_SBAR_LIP%:VIL_W1%=VIL_MX%-VIL_SBAR_IX%
  1221. 17440   WHILE MOUSE(2,0)
  1222. 17442     VIL_MX%=MOUSE(9)
  1223. 17444     IF VIL_MX% THEN
  1224. 17446       VIL_MX%=MOUSE(0)
  1225. 17448       GOSUB *VIL_SBAR_XIERASE
  1226. 17450       VIL_SBAR_LIP%=(VIL_MX%-VIL_W1%-VIL_SBAR_X%-12)*VIL_SBAR_LBL%                                      /(VIL_SBAR_W%-VIL_SBAR_X%-24)
  1227. 17452       GOSUB *VIL_SBAR_XIDRAW
  1228. 17454     ENDIF
  1229. 17456   WEND
  1230. 17458   IF MOUSE(2,1) THEN                               '移動中止
  1231. 17460     GOSUB *VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_W0%:                               GOSUB *VIL_SBAR_XIDRAW
  1232. 17462   ELSE                                             '移動実行
  1233. 17464     VIL_SBAR_R%=4
  1234. 17466   ENDIF
  1235. 17468   MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1236. 17470   MOUSE 4,0,0,639,479
  1237. 17472 ELSE IF VIL_MX%<VIL_SBAR_W%-13 THEN
  1238. 17474   GOSUB *VIL_SBAR_XIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%+VIL_SBAR_LPL%
  1239. 17476   IF VIL_SBAR_LIP%>VIL_SBAR_LBL%-VIL_SBAR_LIL%                                   THEN VIL_SBAR_LIP%=VIL_SBAR_LBL%-VIL_SBAR_LIL%
  1240. 17478   GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=4
  1241. 17480 ELSE
  1242. 17482   IF VIL_SBAR_LIP%+VIL_SBAR_LIL%<VIL_SBAR_LBL%                                   THEN GOSUB *VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+1:                       GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=5
  1243. 17484 ENDIF
  1244. 17486 RETURN
  1245. 17488 '
  1246. 17490 *VIL_SBAR_YOP
  1247. 17492 ' 垂直スクロールバー操作
  1248. 17494 '
  1249. 17496 '入力変数         : MX%,MY%       : マウスクリック位置
  1250. 17498 '                 : SBAR_X%,      : 左端X座標
  1251. 17500 '                   SBAR_Y%       : 上下端Y座標
  1252. 17502 '                   SBAR_Z%
  1253. 17504 '                   SBAR_LBL%     : 論理バー長
  1254. 17506 '                   SBAR_LIL%     : 論理インジケータ長
  1255. 17508 '                   SBAR_LIP%     : 論理インジケータ位置
  1256. 17510 '                   SBAR_LPL%     : 論理ページ長
  1257. 17512 '破壊変数         : MX%,MY%       : マウス位置
  1258. 17514 '                   W0%           : SBAR_LIP%保存
  1259. 17516 '                   W1%           : インジケータ先端とMCのずれ
  1260. 17518 '出力変数         : VIL_SBAR_R%   : スクロールバー操作結果
  1261. 17520 '                                   0 : 操作無効/取消
  1262. 17522 '                                   1 : SBAR_LIP% 1減少
  1263. 17524 '                                   2 : SBAR_LIP% 1ページ減少
  1264. 17526 '                                   3 : SBAR_LIP% ドラッグにより変化
  1265. 17528 '                                   4 : SBAR_LIP% 1ページ増加
  1266. 17530 '                                   5 : SBAR_LIP% 1増加
  1267. 17532 '呼出しモジュール : SBAR_YIDRAW,SBAR_YIERASE
  1268. 17534 '
  1269. 17536 VIL_SBAR_R%=0
  1270. 17538 VIL_SBAR_IY%=VIL_SBAR_Y%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1271. 17540 VIL_SBAR_IZ%=VIL_SBAR_IY%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1272. 17542 IF VIL_MY%<VIL_SBAR_Y%+13 THEN
  1273. 17544   IF VIL_SBAR_LIP%>0                                                             THEN GOSUB *VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-1:                       GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=1
  1274. 17546 ELSE IF VIL_MY%<VIL_SBAR_IY% THEN
  1275. 17548   GOSUB *VIL_SBAR_YIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%-VIL_SBAR_LPL%
  1276. 17550   IF VIL_SBAR_LIP%<0 THEN VIL_SBAR_LIP%=0
  1277. 17552   GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=2
  1278. 17554 ELSE IF VIL_MY%<VIL_SBAR_IZ% THEN
  1279. 17556   MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
  1280. 17558   MOUSE 1,VIL_MX%,VIL_MY%,1
  1281. 17560   MOUSE 4,VIL_SBAR_X%   ,VIL_SBAR_Y%+12+(VIL_MY%-VIL_SBAR_IY%),                        VIL_SBAR_X%+12,VIL_SBAR_Z%-12+(VIL_MY%-VIL_SBAR_IZ%)
  1282. 17562   VIL_W0%=VIL_SBAR_LIP%:VIL_W1%=VIL_MY%-VIL_SBAR_IY%
  1283. 17564   WHILE MOUSE(2,0)
  1284. 17566     VIL_MY%=MOUSE(10)
  1285. 17568     IF VIL_MY% THEN
  1286. 17570       VIL_MY%=MOUSE(1)
  1287. 17572       GOSUB *VIL_SBAR_YIERASE
  1288. 17574       VIL_SBAR_LIP%=(VIL_MY%-VIL_W1%-VIL_SBAR_Y%-12)*VIL_SBAR_LBL%                                      /(VIL_SBAR_Z%-VIL_SBAR_Y%-24)
  1289. 17576       GOSUB *VIL_SBAR_YIDRAW
  1290. 17578     ENDIF
  1291. 17580   WEND
  1292. 17582   IF MOUSE(2,1) THEN                               '移動中止
  1293. 17584     GOSUB *VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_W0%:                               GOSUB *VIL_SBAR_YIDRAW
  1294. 17586   ELSE                                             '移動実行
  1295. 17588     VIL_SBAR_R%=4
  1296. 17590   ENDIF
  1297. 17592   MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
  1298. 17594   MOUSE 4,0,0,639,479
  1299. 17596 ELSE IF VIL_MY%<VIL_SBAR_Z%-13 THEN
  1300. 17598   GOSUB *VIL_SBAR_YIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%+VIL_SBAR_LPL%
  1301. 17600   IF VIL_SBAR_LIP%>VIL_SBAR_LBL%-VIL_SBAR_LIL%                                   THEN VIL_SBAR_LIP%=VIL_SBAR_LBL%-VIL_SBAR_LIL%
  1302. 17602   GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=4
  1303. 17604 ELSE
  1304. 17606   IF VIL_SBAR_LIP%+VIL_SBAR_LIL%<VIL_SBAR_LBL%                                   THEN GOSUB *VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+1:                       GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=5
  1305. 17608 ENDIF
  1306. 17610 RETURN
  1307. 17612 '
  1308. 17614 *VIL_SBAR_XDRAW
  1309. 17616 ' 水平スクロールバー描画
  1310. 17618 '
  1311. 17620 '入力変数         : SBAR_X%,      : 左右端X座標
  1312. 17622 '                   SBAR_W%
  1313. 17624 '                   SBAR_Y%       : 上端Y座標
  1314. 17626 '                   SBAR_LBL%     : 論理バー長
  1315. 17628 '                   SBAR_LIL%     : 論理インジケータ長
  1316. 17630 '                   SBAR_LIP%     : 論理インジケータ位置
  1317. 17632 '破壊変数         : なし
  1318. 17634 '出力変数         : なし
  1319. 17636 '呼出しモジュール : SBAR_XIDRAW
  1320. 17638 '
  1321. 17640 ' 
  1322. 17642 LINE(VIL_SBAR_X%,VIL_SBAR_Y%)-(VIL_SBAR_W%,VIL_SBAR_Y%+10),PSET,%2,BF
  1323. 17644 CONNECT(VIL_SBAR_X%+11,VIL_SBAR_Y%+10)                                             -(VIL_SBAR_W%-11,VIL_SBAR_Y%+10)                                             -(VIL_SBAR_W%-11,VIL_SBAR_Y%   ),%3
  1324. 17646 CONNECT(VIL_SBAR_X%+11,VIL_SBAR_Y%+ 9)                                             -(VIL_SBAR_X%+11,VIL_SBAR_Y%   )                                             -(VIL_SBAR_W%-12,VIL_SBAR_Y%   ),%1
  1325. 17648 GOSUB *VIL_SBAR_XIDRAW
  1326. 17650 RETURN
  1327. 17652 '
  1328. 17654 *VIL_SBAR_YDRAW
  1329. 17656 ' 垂直スクロールバー描画
  1330. 17658 '
  1331. 17660 '入力変数         : SBAR_Y%,      : 上下端Y座標
  1332. 17662 '                   SBAR_Z%
  1333. 17664 '                   SBAR_X%       : 左端X座標
  1334. 17666 '                   SBAR_LBL%     : 論理バー長
  1335. 17668 '                   SBAR_LIL%     : 論理インジケータ長
  1336. 17670 '                   SBAR_LIP%     : 論理インジケータ位置
  1337. 17672 '破壊変数         : なし
  1338. 17674 '出力変数         : なし
  1339. 17676 '呼出しモジュール : SBAR_YIDRAW
  1340. 17678 '
  1341. 17680 ' 
  1342. 17682 LINE(VIL_SBAR_X%,VIL_SBAR_Y%)-(VIL_SBAR_X%+10,VIL_SBAR_Z%),PSET,%2,BF
  1343. 17684 CONNECT(VIL_SBAR_X%   ,VIL_SBAR_Z%-11)                                             -(VIL_SBAR_X%+10,VIL_SBAR_Z%-11)                                             -(VIL_SBAR_X%+10,VIL_SBAR_Y%+11),%3
  1344. 17686 CONNECT(VIL_SBAR_X%   ,VIL_SBAR_Z%-12)                                             -(VIL_SBAR_X%   ,VIL_SBAR_Y%+11)                                             -(VIL_SBAR_X%+ 9,VIL_SBAR_Y%+11),%1
  1345. 17688 GOSUB *VIL_SBAR_YIDRAW
  1346. 17690 RETURN
  1347. 17692 '
  1348. 17694 *VIL_SBAR_XIDRAW
  1349. 17696 ' 水平インジケータ描画
  1350. 17698 '
  1351. 17700 '入力変数         : SBAR_X%,      : 左右端X座標
  1352. 17702 '                   SBAR_W%
  1353. 17704 '                   SBAR_Y%       : 上端Y座標
  1354. 17706 '                   SBAR_LBL%     : 論理バー長
  1355. 17708 '                   SBAR_LIL%     : 論理インジケータ長
  1356. 17710 '                   SBAR_LIP%     : 論理インジケータ位置
  1357. 17712 '破壊変数         : なし
  1358. 17714 '出力変数         : なし
  1359. 17716 '呼出しモジュール : なし
  1360. 17718 '
  1361. 17720 VIL_SBAR_IX%=VIL_SBAR_X%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1362. 17722 VIL_SBAR_IW%=VIL_SBAR_IX%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1363. 17724 CONNECT(VIL_SBAR_IX%,VIL_SBAR_Y%+9)                                                -(VIL_SBAR_IX%,VIL_SBAR_Y%+1)                                                -(VIL_SBAR_IW%,VIL_SBAR_Y%+1),%3
  1364. 17726 CONNECT(VIL_SBAR_IX%+1,VIL_SBAR_Y%+9)                                              -(VIL_SBAR_IW%  ,VIL_SBAR_Y%+9)                                              -(VIL_SBAR_IW%  ,VIL_SBAR_Y%+2),%1
  1365. 17728 RETURN
  1366. 17730 '
  1367. 17732 *VIL_SBAR_YIDRAW
  1368. 17734 ' 垂直インジケータ描画
  1369. 17736 '
  1370. 17738 '入力変数         : SBAR_Y%,      : 上下端Y座標
  1371. 17740 '                   SBAR_Z%
  1372. 17742 '                   SBAR_X%       : 左端X座標
  1373. 17744 '                   SBAR_LBL%     : 論理バー長
  1374. 17746 '                   SBAR_LIL%     : 論理インジケータ長
  1375. 17748 '                   SBAR_LIP%     : 論理インジケータ位置
  1376. 17750 '破壊変数         : なし
  1377. 17752 '出力変数         : なし
  1378. 17754 '呼出しモジュール : なし
  1379. 17756 '
  1380. 17758 VIL_SBAR_IY%=VIL_SBAR_Y%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1381. 17760 VIL_SBAR_IZ%=VIL_SBAR_IY%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1382. 17762 CONNECT(VIL_SBAR_X%+1,VIL_SBAR_IZ%)                                                -(VIL_SBAR_X%+1,VIL_SBAR_IY%)                                                -(VIL_SBAR_X%+9,VIL_SBAR_IY%),%3
  1383. 17764 CONNECT(VIL_SBAR_X%+2,VIL_SBAR_IZ%  )                                              -(VIL_SBAR_X%+9,VIL_SBAR_IZ%  )                                              -(VIL_SBAR_X%+9,VIL_SBAR_IY%+1),%1
  1384. 17766 RETURN
  1385. 17768 '
  1386. 17770 *VIL_SBAR_XIERASE
  1387. 17772 ' 水平インジケータ消去
  1388. 17774 '
  1389. 17776 '入力変数         : SBAR_X%,      : 左右端X座標
  1390. 17778 '                   SBAR_W%
  1391. 17780 '                   SBAR_Y%       : 上端Y座標
  1392. 17782 '                   SBAR_LBL%     : 論理バー長
  1393. 17784 '                   SBAR_LIL%     : 論理インジケータ長
  1394. 17786 '                   SBAR_LIP%     : 論理インジケータ位置
  1395. 17788 '破壊変数         : なし
  1396. 17790 '出力変数         : なし
  1397. 17792 '呼出しモジュール : なし
  1398. 17794 '
  1399. 17796 VIL_SBAR_IX%=VIL_SBAR_X%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1400. 17798 VIL_SBAR_IW%=VIL_SBAR_IX%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
  1401. 17800 LINE(VIL_SBAR_IX%,VIL_SBAR_Y%+1)-(VIL_SBAR_IW%,VIL_SBAR_Y%+9),                   PSET,%2,BF
  1402. 17802 RETURN
  1403. 17804 '
  1404. 17806 *VIL_SBAR_YIERASE
  1405. 17808 ' 垂直インジケータ消去
  1406. 17810 '
  1407. 17812 '入力変数         : SBAR_Y%,      : 上下端Y座標
  1408. 17814 '                   SBAR_Z%
  1409. 17816 '                   SBAR_X%       : 左端X座標
  1410. 17818 '                   SBAR_LBL%     : 論理バー長
  1411. 17820 '                   SBAR_LIL%     : 論理インジケータ長
  1412. 17822 '                   SBAR_LIP%     : 論理インジケータ位置
  1413. 17824 '破壊変数         : なし
  1414. 17826 '出力変数         : なし
  1415. 17828 '呼出しモジュール : なし
  1416. 17830 '
  1417. 17832 VIL_SBAR_IY%=VIL_SBAR_Y%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1418. 17834 VIL_SBAR_IZ%=VIL_SBAR_IY%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
  1419. 17836 LINE(VIL_SBAR_X%+1,VIL_SBAR_IY%)-(VIL_SBAR_X%+9,VIL_SBAR_IZ%),                   PSET,%2,BF
  1420. 17838 RETURN
  1421. 17840 '
  1422. 17842 '--------------------  選択パッケージ --------------------
  1423. 17844 '必要パッケージ : メニュー選択、仮想キー
  1424. 17846 '・実行/取消、はい/いいえ、確認など入力
  1425. 17848 '
  1426. 17850 *VIL_SEL_INITM
  1427. 17852 ' 選択パッケージ初期化
  1428. 17854 '
  1429. 17856 '入力変数         :   なし
  1430. 17858 '破壊変数         :   なし
  1431. 17860 '出力変数         :   なし
  1432. 17862 '呼出しモジュール :   なし
  1433. 17864 '
  1434. 17866 'パッケージ変数   :   なし
  1435. 17868 '
  1436. 17870 RETURN
  1437. 17872 *VIL_SEL_ENVR
  1438. 17874 ' アプリ環境ファイル読み込み
  1439. 17876 '
  1440. 17878 '入力変数         : なし
  1441. 17880 '破壊変数         : なし
  1442. 17882 '出力変数         : なし
  1443. 17884 '呼出しモジュール : LNR
  1444. 17886 '
  1445. 17888 VIL_W0$="":WHILE VIL_W0$<>"#SEL":GOSUB *VIL_LNR:WEND
  1446. 17890 RETURN
  1447. 17892 '
  1448. 17894 *VIL_SEL_ENVW
  1449. 17896 ' アプリ環境ファイル書き込み
  1450. 17898 '
  1451. 17900 '入力変数         : なし
  1452. 17902 '破壊変数         : なし
  1453. 17904 '出力変数         : なし
  1454. 17906 '呼出しモジュール : なし
  1455. 17908 '
  1456. 17910 PRINT #1,"#SEL"
  1457. 17912 RETURN
  1458. 17914 '
  1459. 17916 *VIL_SEL_OK
  1460. 17918 ' 「確認」選択
  1461. 17920 '
  1462. 17922 '入力変数         : X%,Y%         : 「確認」ボックス左上隅座標
  1463. 17924 '                                     (40x24ドット)
  1464. 17926 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
  1465. 17928 '                   XN%,YN%       : ボックス縦横個数
  1466. 17930 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
  1467. 17932 '                   C%            : ボックスカーソル(BC)色
  1468. 17934 '出力変数 :         KN%           : 入力番号
  1469. 17936 '                           1       :決定 / 選択  (1:確認)
  1470. 17938 '                          -1       :取消
  1471. 17940 '                          -2       :ボックス外を左クリック
  1472. 17942 '                          -3       :非対応キー入力
  1473. 17944 '                         -13       :ウィンドウマネージャ起動キー
  1474. 17946 '                   KY%           : 入力キーのアスキーコード
  1475. 17948 '                                  (入力なし:0 )
  1476. 17950 '                   K$            : 入力キー
  1477. 17952 '                                   (入力なし:"")
  1478. 17954 '                   MX%,MY%       : 左クリック位置(絶対座標)
  1479. 17956 '                   MW%,MZ%       : 左クリック位置(相対座標)
  1480. 17958 '                                   (ともにKN%=-2 の時有効)
  1481. 17960 '                            ただしウィンドウ外クリックの時 MW%=-1
  1482. 17962 '                   VKEY_KY%      : 選択キーコード
  1483. 17964 '                   MSEL_BC%      : -1 (BC表示済) 
  1484. 17966 '呼出しモジュール : MSEL_M,MSEL_BC
  1485. 17968 '
  1486. 17970 SYMBOL(VIL_X%+4,VIL_Y%+4),"確認",1,1,7
  1487. 17972 LINE(VIL_X%+2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
  1488. 17974 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
  1489. 17976 VIL_XN%=1:VIL_YN%=1:VIL_C%=15:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
  1490. 17978 VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
  1491. 17980 GOSUB *VIL_MSEL_M
  1492. 17982 GOSUB *VIL_MSEL_BC
  1493. 17984 RETURN
  1494. 17986 '
  1495. 17988 *VIL_SEL_YN
  1496. 17990 ' 「はい」「いいえ」 選択
  1497. 17992 '
  1498. 17994 '入力変数         : X%,Y%         : 「はい」ボックス左上隅座標
  1499. 17996 '                                     (56x24ドット)
  1500. 17998 '                   MSEL_BN%      : ボックスカーソル初期位置
  1501. 18000 '                                     (1:はい / 2:いいえ)
  1502. 18002 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
  1503. 18004 '                   XN%,YN%       : ボックス縦横個数
  1504. 18006 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
  1505. 18008 '                   C%            : ボックスカーソル(BC)色
  1506. 18010 '出力変数 :         KN%           : 入力番号
  1507. 18012 '                           1,2     :決定 / 選択 (1:はい / 2:いいえ)
  1508. 18014 '                          -1       :取消
  1509. 18016 '                          -2       :ボックス外を左クリック
  1510. 18018 '                          -3       :非対応キー入力
  1511. 18020 '                         -13       :ウィンドウマネージャ起動キー
  1512. 18022 '                   KY%           : 入力キーのアスキーコード
  1513. 18024 '                                  (入力なし:0 )
  1514. 18026 '                   K$            : 入力キー
  1515. 18028 '                                   (入力なし:"")
  1516. 18030 '                   MX%,MY%       : 左クリック位置(絶対座標)
  1517. 18032 '                   MW%,MZ%       : 左クリック位置(相対座標)
  1518. 18034 '                                   (ともにKN%=-2 の時有効)
  1519. 18036 '                            ただしウィンドウ外クリックの時 MW%=-1
  1520. 18038 '                   VKEY_KY%      : 選択キーコード
  1521. 18040 '                   MSEL_BN%      : 最後のBC位置 (KN<1のときも有効)
  1522. 18042 '                   MSEL_BC%      : -1 (BC表示済) 
  1523. 18044 '呼出しモジュール : MSEL_M,MSEL_BC
  1524. 18046 '
  1525. 18048 SYMBOL(VIL_X%+4,VIL_Y%+4),"はい    いいえ",1,1,7
  1526. 18050 LINE(VIL_X%+ 2,VIL_Y%+2)-(VIL_X%+ 53,VIL_Y%+21),PSET,7,B
  1527. 18052 LINE(VIL_X%+66,VIL_Y%+2)-(VIL_X%+117,VIL_Y%+21),PSET,7,B
  1528. 18054 VIL_W%=VIL_X%+55:VIL_Z%=VIL_Y%+23
  1529. 18056 VIL_XL%=64:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
  1530. 18058 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
  1531. 18060 GOSUB *VIL_MSEL_M
  1532. 18062 GOSUB *VIL_MSEL_BC
  1533. 18064 IF VIL_KN%=-1 THEN VIL_KN%=2      '取消入力なら「いいえ」
  1534. 18066 RETURN
  1535. 18068 '
  1536. 18070 *VIL_SEL_DO
  1537. 18072 ' 「実行」「取消」選択
  1538. 18074 '   (0,0)-(87,23)
  1539. 18076 '
  1540. 18078 '入力変数         : X%,Y%         : 「実行」ボックス左上隅座標
  1541. 18080 '                                     (40x24ドット)
  1542. 18082 '                   MSEL_BN%      : ボックスカーソル初期位置
  1543. 18084 '                                     (1:実行 / 2:取消)
  1544. 18086 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
  1545. 18088 '                   XN%,YN%       : ボックス縦横個数
  1546. 18090 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
  1547. 18092 '                   C%            : ボックスカーソル(BC)色
  1548. 18094 '出力変数 :         KN%           : 入力番号
  1549. 18096 '                           1,2     :決定 / 選択 (1:実行 / 2:取消)
  1550. 18098 '                          -1       :取消
  1551. 18100 '                          -2       :ボックス外を左クリック
  1552. 18102 '                          -3       :非対応キー入力
  1553. 18104 '                         -13       :ウィンドウマネージャ起動キー
  1554. 18106 '                   KY%           : 入力キーのアスキーコード
  1555. 18108 '                                  (入力なし:0 )
  1556. 18110 '                   K$            : 入力キー
  1557. 18112 '                                   (入力なし:"")
  1558. 18114 '                   MX%,MY%       : 左クリック位置(絶対座標)
  1559. 18116 '                   MW%,MZ%       : 左クリック位置(相対座標)
  1560. 18118 '                                   (ともにKN%=-2 の時有効)
  1561. 18120 '                            ただしウィンドウ外クリックの時 MW%=-1
  1562. 18122 '                   VKEY_KY%      : 選択キーコード
  1563. 18124 '                   MSEL_BN%      : 最後のBC位置 (KN<1のときも有効)
  1564. 18126 '                   MSEL_BC%      : -1 (BC表示済) 
  1565. 18128 '呼出しモジュール : MSEL_M,MSEL_BC
  1566. 18130 '
  1567. 18132 SYMBOL(VIL_X%+4,VIL_Y%+4),"実行  取消",1,1,7
  1568. 18134 LINE(VIL_X%+ 2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
  1569. 18136 LINE(VIL_X%+50,VIL_Y%+2)-(VIL_X%+85,VIL_Y%+21),PSET,7,B
  1570. 18138 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
  1571. 18140 VIL_XL%=48:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
  1572. 18142 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
  1573. 18144 GOSUB *VIL_MSEL_M
  1574. 18146 GOSUB *VIL_MSEL_BC
  1575. 18148 IF VIL_KN%=-1 THEN VIL_KN%=2      '取消入力なら「いいえ」
  1576. 18150 RETURN
  1577. 18152 '
  1578. 18154 'SCALE--------2---------3---------4---------5---------6---------7-----*--*8
  1579.